本系列博客汇总在这里:过滤器汇总


过滤器的 FilterChain 配置
  • doFilter() 方法的参数中有一个类型为 FilterChain 的参数,它只有一个方法:doFilter(ServletRequest,ServletResponse)。
  • 前面我们说 doFilter() 方法的放行,让请求流访问目标资源!但这么说不严密,其实调用该方法的意思是,“我(当前 Filter )”放行了,但不代表其他人(其他过滤器)也放行。
    也就是说,一个目标资源上,可能部署了多个过滤器,就好比在你去北京的路上有多个打劫的匪人(过滤器),而其中第一伙匪人放行了,但不代表第二伙匪人也放行了,所以调用 FilterChain 类的 doFilter() 方法表示的是执行下一个过滤器的 doFilter() 方法,或者是执行目标资源!
  • 如果当前过滤器是最后一个过滤器,那么调用 chain.doFilter() 方法表示执行目标资源,而不是最后一个过滤器,那么 chain.doFilter() 表示执行下一个过滤器的 doFilter() 方法。
    过滤器(5)_过滤器的 FilterChain 配置_其他
    过滤器(5)_过滤器的 FilterChain 配置_xml_02
  • 多个过滤器执行顺序
    一个目标资源可以指定多个过滤器,过滤器的执行顺序是在 web.xml 文件中的部署顺序。
    过滤器(5)_过滤器的 FilterChain 配置_其他_03
    过滤器(5)_过滤器的 FilterChain 配置_其他_04

如有错误,欢迎指正!