过滤器链
一个web应用中可以配置多个过滤器(Filter), 这多个过滤器称之为过滤器链
- 准确的说是访问某个资源的时候的多个过滤器构成了一个过滤器链
- 因为如果我们一个web项目中的多个过滤器之间都不会形成交集,都不会拦截到访问同一个Servlet的请求, 这个时候这些过滤器其实就是各自单独存在的, 其实并没有形成过滤器链
图解:
这个时候就会有相应的问题出现了: 我们的多个过滤器之间如何知道那个过滤器在前面执行, 那个过滤器在后面执行?
注意: 注解配置的过滤器(Filter), 优先级是按照过滤器类名(字符串)的自然排序
-
就是和Java中的字符串比较大小是一样的, 就是从第一个字符开始一个字符一个字符的比较, 知道比较出结果为止, 比较的结果中小的过滤器在前面, 大的在后面, 也就时小的先执行(最先拦截)
-
我们通过一个例子来说明:
-
如果我们此时有两个过滤器FilterDemo和FilterDemo2都是拦截同一个资源的时候: 关于过滤器中代码的执行顺序如下:
FilterDemo放行前代码 —> FilterDemo2放行前代码 —> 访问到Servlet资源,执行service()方法 —> FilterDemo2放行后代码 —> FilterDemo放行后代码
-