一、在MyEclipse中定义filter
只要在新建普通类时让它实现Filter接口就可以了。然后IDE会自动导入相关必须的类(还挺多的),而且一般会生成3个方法:
[java] view plaincopy
01.public void init(FilterConfig filterConfig) throws ServletException
02.public void doFilter(ServletRequest req, ServletResponse res,
03. FilterChain chain) throws IOException, ServletException
04.public void destroy()
一般只需要在doFilter方法体内编写相关代码就行。
二、已登陆验证
除了首页外,只有用户成功登陆后才能进入其他页面。为了防止用户通过在浏览器地址栏输入地址非法进入这些页面,可以定义一个filter,当进入这些页面时,检查session的相关属性是否存在。只要客户浏览器没有关闭,session对象会一直保持,只要其中的属性没有被更改,将会一直保持。
在LoginFilter的doFilter方法体内编写如下代码:
[java:firstline[26]] view plaincopy
26.HttpServletRequest request=(HttpServletRequest)req;
27. HttpServletResponse response=(HttpServletResponse)res;
28. String currentURL=request.getRequestURI();
29. String currentPage=currentURL.substring(currentURL.lastIndexOf("/"),currentURL.length());
30.
31. //判断是否进入LoginServlet
32. if(currentPage!=null&¤tPage.equals("/LoginServlet")){
33. //如果不是从首页进入
34. if(request!=null&&
35. (request.getParameter("action")==null
36. ||(!(request.getParameter("action").equals("checkLogin"))
37. &&!(request.getParameter("action").equals("updatePasswd"))
38. &&!(request.getParameter("action").equals("logoff"))))){
39. response.sendRedirect("/webExam/index.jsp");
40. return;
41. }//end 如果不是从首页进入
42. }//end 判断是否进入LoginServlet
43. else{//进入其他页面
44. HttpSession s=request.getSession();
45. String identity=(String)s.getAttribute("identity");
46. //如果是非登陆进入的
47. if(identity==null||identity.equals("")){
48. response.sendRedirect("/webExam/index.jsp");
49. return;
50. }//end 如果是非登陆进入的
51. }
52.
53. //把请求发送给下一个过滤器
54. chain.doFilter(req,res);
26、27行将请求与响应对象强制转换为Http...类型。
29行获取网址中最后一个"/"之后的内容,也就是实际进入的页面文件名。
32行出现的LoginServlet是用来验证登陆、注销以及密码修改这三个操作的。要执行哪一个操作可以使用request的action属性来判断。因此,只要都不是这些操作,就可以确认是非法进入,强制跳转到首页中——有漏洞,应该还要判定该用户是否已经成功登陆。
43行的分支是对其他页面的验证,这些页面是只有登陆成功的用户才能进入的。
三、在web.xml中配置
因为进行身份验证的Filter的实现逻辑类似,故不再阐述。
配置格式如下:
[xhtml] view plaincopy
01.<filter>
02. <description>限制未登录的用户访问页面资源</description>
03. <filter-name>LoginFilter</filter-name>
04. <filter-class>filters.LoginFilter</filter-class>
05. </filter>
06. <filter>
07. <description>身份验证</description>
08. <filter-name>IdentityFilter</filter-name>
09. <filter-class>filters.IdentityFilter</filter-class>
10. </filter>
这里定义了两个Filter,定义顺序应该决定执行顺序吧。
然后还要配置该Filter对哪些页面起作用
[xhtml] view plaincopy
01.<filter-mapping>
02. <filter-name>LoginFilter</filter-name>
03. <url-pattern>/student/*</url-pattern>
04. </filter-mapping>
05. <filter-mapping>
06. <filter-name>LoginFilter</filter-name>
07. <url-pattern>/teacher/*</url-pattern>
08. </filter-mapping>
09. <filter-mapping>
10. <filter-name>LoginFilter</filter-name>
11. <url-pattern>/servlet/*</url-pattern>
12. </filter-mapping>
这三个filter-mapping的不同之处仅在于url-pattern这里,貌似没有方法一次过写上三个路径,所以这里只要分三个来写了。
分享到:
相关推荐
结合使用Struts2拦截器和Servlet Filter,我们可以构建出强大的权限验证机制。拦截器适用于Action级别的控制,而Filter则可以全局拦截所有请求,两者相辅相成,确保只有已登录用户才能访问受保护的资源。 在提供的`...
3. **拦截器与过滤器**:Spring MVC的权限验证通常结合拦截器(`HandlerInterceptor`)和过滤器(`Filter`)一起使用。`Filter`可以用于全局的请求处理,如登录检查、CSRF防护等,而`Interceptor`则可以对特定的...
Filter可以用来进行权限验证、数据转换、日志记录等多种任务。在JSP权限管理系统中,Filter主要用于检查用户的登录状态,以及权限匹配,确保只有合法用户才能访问特定的JSP页面。 **Filter工作原理:** 当用户发起...
首先,我们来看一下标题和描述中提到的核心概念——Filter登录权限验证。这是通过Filter来检查用户是否已经登录,如果用户未登录,系统将阻止他们访问受保护的页面,而是引导他们去登录界面。这个过程通过自定义的...
-- authc:该过滤器下的页面必须验证后才能访问,它是Shiro内置的一个拦截器org.apache.shiro.web.filter.authc.FormAuthenticationFilter --> <property name="filterChainDefinitions"> /statics/**=anon ...
文件名`TestFilter`可能表示一个测试过滤器,用于验证权限控制的实现。在实际开发中,可以创建一个测试环境,模拟不同的用户状态和请求,确保过滤器按预期工作。 5. **安全性考量**: 虽然示例中给出了用户名和...
7. **异常处理**: 设置适当的异常处理机制,以处理权限验证失败等情况,确保系统的健壮性。 通过以上步骤,我们可以实现一个基于RBAC的权限控制系统,利用`Filter`对用户请求进行拦截,确保只有拥有相应角色的用户...
这个压缩包“Mvc3Filter”可能包含了演示如何在MVC3项目中实现和使用Filter验证AOP的具体示例代码,包括Filter的定义、注册以及验证功能的实现。通过研究这些示例,你可以更深入地理解如何在实际项目中应用这些概念...
本话题主要关注如何使用Java Filter来限制用户的浏览权限,确保只有经过身份验证和授权的用户才能访问特定的资源。这在构建安全的Web应用程序时至关重要。 首先,我们需要了解Java Filter的基本概念。Filter是...
在这个“servlet过滤器做的简单登陆demo”中,我们将探讨如何利用过滤器实现一个基础的登录验证系统。这个例子非常适合初学者理解和实践过滤器的用法。 1. **Servlet Filter原理**: Servlet过滤器遵循`Filter`...
例如,我们可以检查请求中的session信息,或者使用Spring Security等框架进行更复杂的权限验证。 ```java // 获取session中的用户信息 User user = (User) request.getSession().getAttribute("currentUser"); // ...
`Filter`类的应用主要体现在对HTTP请求和响应进行预处理和后处理,比如权限验证、数据编码转换、日志记录等。在这个主题中,我们将深入探讨如何使用`Filter`进行用户验证。 一、Filter接口简介 `javax.servlet....
在本文中,我们将深入探讨...总的来说,通过结合使用JSP、Servlet、Filter和JavaBean,我们可以创建一个健壮的权限管理系统,确保只有经过身份验证的用户才能访问敏感资源。这在实际的Web应用开发中是非常常见的实践。
- 编写测试用例,模拟不同场景的登录、权限验证,确保 Shiro 整合的正确性。 通过这个案例,你可以全面了解如何在实际项目中应用 Shiro 进行用户认证和授权,为你的系统提供安全基础。案例中包含的详细步骤和代码...
- 可以通过多个Filter组合实现复杂的拦截逻辑,例如先进行身份验证,再进行权限检查。 - 为Filter提供明确的名称和合理的URL映射,以便于理解和维护。 通过以上讲解,你应该对使用Servlet Filter实现权限拦截有了...
- Spring Security的Filter可以与JWT(JSON Web Tokens)配合,实现基于令牌的身份验证和授权。 - CORS(跨源资源共享)Filter可以确保跨域请求的安全性,限制未经授权的请求。 6. **异常处理和错误页面** - 当...
1. **最小权限原则**:只给予验证成功后的用户执行所需操作的权限。 2. **日志记录**:记录验证尝试,以便于监控和分析潜在的安全问题。 3. **测试**:进行全面的测试,确保自定义验证机制在各种情况下都能正常工作...
3. **权限验证**:在用户尝试访问资源时,系统进行权限验证。 4. **权限刷新**:如果权限发生变更,系统需要实时更新用户的权限状态。 综上所述,"jsp做的权限管理系统"是一个全面的解决方案,它涉及到用户管理、...
通过以上步骤,我们可以构建一个基于SSM和Shiro的权限管理系统,能够实现用户登录、权限验证、增删改查操作等功能。这个实例将帮助开发者深入理解SSM与Shiro的整合,提升Java Web应用的安全性。
标题中的“用过滤器验证登陆框架,简单实例”指的是在Web开发中,使用过滤器(Filter)技术来实现用户登录验证的一种常见方法。过滤器是Servlet技术的一部分,它允许我们在请求到达目标资源(如Servlet、JSP页面)...