用Filter防止用户访问一些未被授权的资源,比如一个用户未登录就不允许访问网站的某些页面,并将页面重定向到需要用户登录的页面,下面是一个相关的例子:
package com.drp.util.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class AuthFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {// 1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
HttpServletRequest request = (HttpServletRequest)servletRequest;// ;//如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest
HttpServletResponse response = (HttpServletResponse)servletResponse。
String currentURL = request.getRequestURI();// 取得根目录所对应的绝对路径:
String targetURL = currentURL.substring(currentURL.indexOf("/", 1), currentURL.length()); // 截取到当前文件名用于比较
HttpSession session = request.getSession(false);
if (!"/login.jsp".equals(targetURL)) {// 判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环
if (session == null || session.getAttribute("user") == null) {// *用户登录以后需手动添加session
System.out.println("request.getContextPath()=" + request.getContextPath());
response.sendRedirect(request.getContextPath() + "/login.jsp");// 如果session为空表示用户没有登录就重定向到login.jsp页面
return;
}
}
// 加入filter链继续向下执行
filterChain.doFilter(request, response);// .调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
然后在配置文件web.xml里添加: (请注意,过滤是在serlvet规范2.3版中初次引入的。因此,web.xml文件必须使用DTD的2.3以上版本。)
<filter>
<filter-name>AuthFilter</filter-name>
<filter-class>com.drp.util.filter.AuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>*.jsp</url-pattern>// 表示对所有jsp文件有效
</filter-mapping>
这样用户没有登录的情况下就会转到登录页面。
分享到:
相关推荐
防止未登录用户直接访问特定资源是确保网站安全的基本措施。这通常通过拦截器(Interceptor)或者过滤器(Filter)来实现。在Servlet中,我们可以创建一个实现了javax.servlet.Filter接口的类,然后在web.xml中配置...
4. **拦截非授权访问**:如果用户尝试访问未授权的资源,`Filter`应拦截请求,返回错误消息或重定向至合适的页面。 **三、同一账号只能登录一台设备** 1. **会话唯一性**:当用户在新设备上登录时,我们需要检测已...
**JSP权限管理系统filter**是基于Java和JSP技术实现的一种常见的Web应用程序安全控制机制,主要目的是为了实现用户访问控制,防止未授权的用户访问敏感资源。在这个系统中,Filter(过滤器)扮演了关键角色,它在...
通常,我们会设置登录检查机制,防止非登录用户访问某些特定资源。Filter可以在此过程中发挥关键作用,通过检查请求中的用户信息来判断是否允许访问。如果用户未登录,Filter可以直接返回错误页面或者重定向到登录...
在这个场景中,"Filter进行权限控制"指的是使用`Filter`来实现用户访问权限的管理,确保只有登录后的用户才能访问特定的资源。下面我们将深入探讨`Filter`的工作原理以及如何实现登录控制。 `Filter`是Java Servlet...
Filter则用于在请求到达目标Servlet之前检查用户是否已登录,防止未经授权的访问。通过结合使用Servlet和Filter,我们可以构建安全、高效的用户登录系统,为用户提供更好的体验。在实际项目中,还需要考虑更多细节,...
在JSP中,我们可以通过Session对象来跟踪已登录用户,一旦发现某个用户需要被限制,我们可以在Filter中检查Session状态,如果该用户被标记为禁止访问,则返回403 Forbidden错误。 封杀用户可能基于多种原因,比如...
为了防止未经授权的直接URL访问,Web服务器(如Apache、Nginx或Tomcat)可以通过配置来限制对某些目录或文件的访问。例如,可以设置访问控制指令,仅允许特定IP或用户访问特定资源。 3. **Java Servlet**: 在...
6. **授权**:授权是权限管理系统的核心部分,决定了用户能访问哪些资源。在本项目中,通过将用户、角色和资源关联,可以实现细粒度的权限控制,包括对权限码的控制,这意味着可以精确到每个具体的操作。 7. **权限...
- **安全控制**:Filter可以用来检查请求是否携带正确的认证信息,阻止未授权的访问。 - **性能优化**:通过对响应进行GZIP压缩,可以减少网络传输的数据量,提高页面加载速度。 - **日志记录**:记录每个请求的...
- **安全性增强**:通过拦截器防止未授权用户访问敏感数据或执行敏感操作。 - **用户体验优化**:自动检测用户登录状态,减少用户重复登录的次数,提高系统的易用性。 #### 五、总结 登录拦截器是Web应用中一种...
这个名为"Struts2编写的通用(拦截器,过滤器)Filter"的项目,主要目标是防止用户非法访问未授权的页面,确保只有登录用户才能访问特定的资源。 **拦截器(Interceptor)** 拦截器是Struts2框架的核心特性之一,它...
这有助于防止恶意攻击、DDoS(分布式拒绝服务)攻击,以及对特定资源的未授权访问。 3. **Java Web过滤器(Filter)**:在Java Web应用中,Filter是Servlet规范的一部分,用于拦截HTTP请求和响应。我们可以通过...
在实际应用中,Filter常用于实现权限拦截,防止未授权的用户访问特定资源。本教程将详细解释如何使用Servlet Filter来实现权限拦截。 ### 1. Filter的基本概念 Filter是Servlet API的一部分,定义在`javax.servlet...
这个Cookie在后续请求中被发送到所有相关应用,以此来判断用户是否已授权登录。 **二、Filter原理** Filter是Java Web开发中的一个重要组件,它允许开发者在请求到达目标资源之前或之后进行拦截处理。在SSO系统中,...
8. **权限控制**:授权部分可能涉及到角色(Role)和权限(Permission)的概念,用户被分配到特定角色,每个角色具有一定的权限,允许访问特定资源。Spring Security或Apache Shiro等第三方库可以帮助实现复杂的角色...
通过检查请求参数或会话状态,可以防止未授权用户访问受保护的资源。 2. **字符编码转换**:确保请求参数的正确编码,防止跨站脚本攻击(XSS)和其他编码相关的安全问题。 3. **性能优化**:例如,缓存静态资源,...
8. **记住我功能**:对于需要记住用户状态的Web应用,Spring Security提供了“Remember Me”服务,可以在用户关闭浏览器后仍然保持登录状态,但需要注意此功能可能对静态资源的访问权限产生影响。 总的来说,...
在Java Web开发中,权限访问控制是至关重要的一个环节,它确保了只有具有特定权限的用户才能访问特定的资源或执行...记住,安全是Web应用开发中的一项核心任务,正确地实施访问控制能有效防止未授权访问和数据泄露。
- **拦截器**:通过配置Shiro的Filter,可以在Web层进行权限拦截,防止未授权的访问。 总之,Apache Shiro的授权设计提供了灵活多样的方案,无论是基于角色还是基于权限,都能满足不同规模和复杂度的项目需求。理解...