Filter
1、简介
Filter也称之为过滤器,是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等
2、工作原理
Filter接口中有一个doFilter方法,当我们编写好Filter,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,
都会先调用一下filter的doFilter方法,因此,在该方法内编写代码可达到如下目的:
调用目标资源之前,让一段代码执行。
是否调用目标资源(即是否让用户访问web资源)。
调用目标资源之后,让一段代码执行。
web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对象,它也提供了一个
doFilter方法,开发人员可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源的service方法,即web资源就会被访问,
否则web资源不会被访问。
3、代码分析
@WebFilter(filterName="log" ,urlPatterns={"/*"})//filterName指定该Filter的名称,urlPatterns指定该Filter所拦截的URL public class LogFilter implements Filter { //FilterConfig用于访问Filter的配置信息 private FilterConfig config;//实现初始化 public void init(FilterConfig config) { this.config = config; }//实现销毁 public void destroy() { this.config = null; }//执行过滤的核心方法 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)//最后一个参数是FilterChain对象,此参数是用来调用servlet或JSP页。 throws IOException,ServletException { //---------下面代码用于对用户请求执行预处理--------- //获取ServletContext对象,用于记录日志 ServletContext context = this.config.getServletContext(); long before = System.currentTimeMillis(); System.out.println("开始过滤..."); //将请求转换成HttpServletRequest请求 HttpServletRequest hrequest = (HttpServletRequest)request; //输出提示 System.out.println("Filter已经截获到用户的请求的地址: " + hrequest.getServletPath()); chain.doFilter(request, response); //---------下面代码用于对服务器响应执行后处理--------- long after = System.currentTimeMillis(); System.out.println("过滤结束");//输出提示信息 System.out.println("请求被定位到" + hrequest.getRequestURI() + " 所花的时间为: " + (after - before)); } }参考博客:https://blog.csdn.net/reggergdsg/article/details/52821502

浙公网安备 33010602011771号