Java Web中的过滤器Filter
一、什么是Filter 与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序中。但是与其他web应用程序组件不同的是,过滤器是"链"在容器的处理过程中的。这就意味着它们会在servlet处理器之前访问一个进入的请求,并且在外发响应信
一、什么是Filter
与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序中。但是与其他web应用程序组件不同的是,过滤器是"链"在容器的处理过程中的。这就意味着它们会在servlet处理器之前访问一个进入的请求,并且在外发响应信息返回到客户前访问这些响应信息。这种访问使得过滤器可以检查并修改请求和响应的内容。
它与Servlet的区别在于:它不能直接向用户生成响应。完整的Filter流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
Filter有如下几个作用:
1. 在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest请求;
2. 根据需要检查HttpServletRequest,也可以对HttpServletRequest头和数据进行修改;
3. 在HttpServletResponse到达客户端之前,拦截HttpServletResponse;
4. 根据需要检查HttpServletResponse,也可以对HttpServletResponse头和数据进行修改;
5. Filter可以拦截多个请求和响应,一个请求和响应可以被多个Filter拦截。
Filter有以下几个种类:
1. 用户授权的Filter:Filter负责检查用户的请求,根据请求过滤用户的非法请求;
2. 日志Filter:详细记录用户的请求信息;
3. 负责解码的Filter:对非标准编码的解码;
4. 能改变XML内容的XSLT Filter等。
二、Filter的实现
1. 创建Filter处理类:
Filter处理类必须实现javax.servlet.Filter接口。该接口有3个方法:
1) public void init(FilterConfig arg0) throws ServletException用于初始化Filter,只会在Web容器启动的时候自动调用而且只调用一次,FilterConfig 封装了Filter配置参数(init-param)内容信息,初始化的时候可以直接拿出来;在acegi安全认证中FilterConfig封装的是被代理对象。
2) public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException,ServletException {用于实现过滤的方法,该方法会在每次请求中调用,或每次响应中调用;ServletRequest 封装了请求信息,ServletResponse 封装了响应信息;在chain.doFilter(req, res);代码执行之前进行的处理是对请求的预处理,在chain.doFilter(req, res);代码执行之后执行的处理是对响应进行的后处理,一般拥有权限的才调用chain.doFilter(req, res);方法或者跳转到错误页面。
3) public void destroy() {用于进行资源释放,当过滤处理完毕后会调用该方法。
2. web.xml中配置Filter:
1) 配置Filter名,如下:
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.lanp.MyFilter</filter-class>
<init-param>
<param-name>super_role</param-name>
<param-value>lanp</param-value>
</init-param>
</filter>
2) 配置要交给Filter拦截器处理的URL,如下:
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
更多推荐
所有评论(0)