在有些场景中需要指定过滤器的调用顺序,以达到对应的需求,比如编码过滤器和安全认证过滤器,一般情况下编码过滤器先被调用,然后是安全认证过滤器,这样的顺序保证可以使用正确的编码。那么过滤器的调用顺序和什么有关呢?
Java Web中的过滤器有两种配置方式,在web.xml配置和注解的形式配置。
一、在web.xml中配置Filter的调用顺序
看下面的例子:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>com.gyb.javaee.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter>
<filter-name>authenFilter</filter-name>
<filter-class>com.gyb.javaee.web.filter.AuthenticationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>authenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
在这个web.xml中配置了两个过滤器 authenFilter和characterEncodingFilter,servlet容器首先会调用characterEncodingFilter,然后再调用authenFilter方法。这个调用顺序是和Filter的filter-mapping的配置有关,调用顺序从上到下,也就是说上面的配置先于下面的先调用,和filter配置的顺序无关。
二、使用@WebFilter注解配置的Filter的调用顺序
暂时不能确定顺序(没找到规律!查看Servlet规范也没找到相关的文档说明。若有大佬知道,请留言,谢谢!)。。。
三、使用web.xml和@WebFilter注解混合配置Filter
暂时不能确定顺序(没找到规律!查看Servlet规范也没找到相关的文档说明。若有大佬知道,请留言,谢谢!)。。。