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
注释的属性。我不知道是否没有为了简单做