首页 > 代码库 > 【JavaEE企业应用实战学习记录】Filter

【JavaEE企业应用实战学习记录】Filter

 1 package sanglp.servlet; 2  3 import javax.servlet.*; 4 import javax.servlet.annotation.WebFilter; 5 import javax.servlet.http.HttpServletRequest; 6 import java.io.IOException; 7  8 /** 9  * Created by Administrator on 2016/10/5.10  */11 @WebFilter(filterName = "log", urlPatterns={"/*"} )12 public class LogFilter  implements Filter {13 14     //用于访问Filter的配置信息15     private FilterConfig config;16 17 18     @Override19     public void init(FilterConfig filterConfig) throws ServletException {20         this.config=filterConfig;21     }22 23     @Override24     public void destroy() {25         this.config=null;26     }27 28     @Override29     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {30         //对于用户请求进行预处理31         //获取ServletContext对象  用于记录日志32         ServletContext context=this.config.getServletContext();33         long before=System.currentTimeMillis();34         System.out.println("开始过滤");35         //将请求转换成HttpServletRequest36         HttpServletRequest hrequest=(HttpServletRequest) servletRequest;37         //输出提示信息38         System.out.println("Filter已经截获到用户的请求的地址"+hrequest.getServletPath());39         //Filter只是链式处理,请求依然放到目的地址40         filterChain.doFilter(servletRequest, servletResponse);41         //响应执行后处理42         long  after=System.currentTimeMillis();43         System.out.println("过滤结束");44         System.out.println("请求被定位到"+hrequest.getRequestURI()+"所花的时间为:"+(after-before));45     }46 }

Filter:用于处理对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。
使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理,
Filter用处:
在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest
根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据
在HttpServletResponse到达客户端之前,拦截HttpServletResponse
根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据
Filter有如下几个种类:
用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求
日志Filter:详细记录某些特殊的用户请求
负责解码的Filter:包括对非标准编码的请求解码
能改变XML内容的XSLT Filter等
Filter可拦截多个请求或响应,一个请求或响应也可以被多个Filter拦截
创建一个Filter:
创建Filter处理类,->实现javax.servlet.Filter借口
web.xml文件中配置Filter

【JavaEE企业应用实战学习记录】Filter