Answers:
您确实不能使用@WebFilter注释定义过滤器执行顺序。但是,为了最大程度地减少web.xml使用量,仅用a注释所有过滤器就足够了,filterName这样您就不需要<filter>定义,而只需<filter-mapping>按所需顺序定义即可。
例如,
@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}
与web.xml只是这样:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/url1/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>/url2/*</url-pattern>
</filter-mapping>
如果您希望将网址格式保留在中@WebFilter,则可以这样做,
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
但您仍应保留<url-pattern>in web.xml,因为XSD要求它是必需的,尽管它可以为空:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>
不管采用哪种方法,这一切都将在Tomcat 7.0.28版之前失败,因为它会由于<filter-mapping>不存在而被阻塞<filter>。另请参阅使用Tomcat,@ WebFilter不适用于web.xml中的<filter-mapping>
<url-pattern />在JBoss EAP 6.1上不起作用-它会覆盖该@WebFilter值并完全阻止过滤器运行。
order嵌套@WebFilterMapping注释的属性。我不知道是否没有为了简单做