首页 > 代码库 > 【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