java-web-Filter-登录验证之筛选器使用实例
2017-05-02 11:46
585 查看
java-web-Filter-登录验证之筛选器使用实例
一、简介:
Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
二、容易混淆的几个概念:
拦截器:是在面向切面编程(AOP)的就是在你的service或者一个方法;
过滤器:是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者其它web容器;
监听器:Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。
三、使用过滤器,对指定的 url 进行拦截
目标:在做登录验证时,往往会对“登录页”和“一些资源类的地址”不进行登录验证直接放行,这就需要使用筛选器进行地址验证,从而达到预期效果。
四、代码部分
1.1 注册筛选器,配置初始化参数(enable:是否启用;exclude_url:不进行验证的 url;)
1.2 AuthFilter.java 筛选器
一、简介:
Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
二、容易混淆的几个概念:
拦截器:是在面向切面编程(AOP)的就是在你的service或者一个方法;
过滤器:是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者其它web容器;
监听器:Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。
三、使用过滤器,对指定的 url 进行拦截
目标:在做登录验证时,往往会对“登录页”和“一些资源类的地址”不进行登录验证直接放行,这就需要使用筛选器进行地址验证,从而达到预期效果。
四、代码部分
1.1 注册筛选器,配置初始化参数(enable:是否启用;exclude_url:不进行验证的 url;)
<!-- 登录验证 filter --> <filter> <filter-name>AuthFilter</filter-name> <filter-class>com.demo.web.filter.AuthFilter</filter-class> <init-param> <!-- 是否启用登录验证 --> <param-name>enable</param-name> <param-value>true</param-value> </init-param> <init-param> <!-- 不验证的url(正则表达式)--> <param-name>exclude_url</param-name> <param-value>(login.jsp)|(/login/.+)|(/content/.+)</param-value> </init-param> </filter> <filter-mapping> <filter-name>AuthFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping>
1.2 AuthFilter.java 筛选器
package com.demo.web.filter; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; 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 org.aspectj.weaver.ast.Var; import com.demo.web.utilis.Global; import com.sun.tools.javac.resources.javac; import me.grass.coder.Debug; import me.grass.extend.StringExtend; /** * 权限筛选器 * @author xxj */ public class AuthFilter implements Filter{ Pattern _patten; boolean _enbale=true; @Override public void init(FilterConfig arg0) throws ServletException { String enable = arg0.getInitParameter("enable"); String regex = arg0.getInitParameter("exclude_url"); Debug.printForamt("AuthFilter init-param: enable={0};exclude_url={1}",enable,regex); _enbale = StringExtend.getBoolean(enable); // 初始化正则验证器 if(_patten==null){ //忽略大小写 _patten = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Debug.printForamt("权限筛选器初始化;AuthFilter.Enable={1};正则 ={0};", regex,_enbale); } } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filter) throws IOException, ServletException { if(!_enbale){ Debug.printForamt("AuthFilter.Enable = {0};", _enbale); filter.doFilter(request, response); return; } HttpServletRequest req = (HttpServletRequest)request; String url = req.getRequestURI(); //1.web.xml 中配置的,不验证的url Matcher matcher = _patten.matcher(url); if(matcher.find()){ Debug.printForamt("[不验证] {0}", url); filter.doFilter(request, response); return; } //2.登录验证(未登录跳转到登录页) if(对 session 的判断){ Debug.printForamt("[未登录] {0}", url); HttpServletResponse resp = (HttpServletResponse)response; resp.sendRedirect(req.getContextPath()+"/login.jsp?unlogin"); filter.doFilter(request, response); return; } //3.验证访问权限 Debug.printForamt("[已授权] {0}", url); filter.doFilter(request, response); } @Override public void destroy() { // TODO Auto-generated method stub } }
相关文章推荐
- Java Web Filter登录验证
- JAVA Web 安全机制----使用filter验证session用户和页面缓存问题处理
- Java Web Filter之登录验证
- java中使用Filter控制用户登录权限具体实例
- javaweb之response随机生成图片验证码加载到web页面中(本实例使用了禁止浏览器缓存头),并且单击使用javascript换图片
- Java web Filter的介绍及使用
- JAVA_WEB项目之j使用query的验证框架的例子
- javaweb 简单验证过滤器防止未登录直接进入主页
- javaweb基本组件之filter的使用
- [java Web]Filter使用,用户30天自动登陆
- Java发送邮件的jar包和实例(经过验证可以使用)
- 使用Filter统计Java(J2EE)的web程序http请求响应时间
- 使用Filter统计Java(J2EE)的web程序http请求响应时间
- 在maven项目中使用apache cxf中遇到异常 java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter
- Java Web---登录验证和字符编码过滤器
- 玩转web之servlet(六)---session介绍及简单使用(登录验证中保存信息)
- 使用java编写SmartFoxServer自定义安全验证登录扩展
- 在java程序中,使用sAMAccountName作为登录名通过LDAP目录库验证
- 使用java编写SmartFoxServer自定义安全验证登录扩展
- Java web登录验证过滤器