Вы действительно не можете определить порядок выполнения фильтра, используя аннотацию @WebFilter
. Однако, чтобы свести к минимуму использование web.xml
, достаточно аннотировать все фильтры с помощью 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>
Если вы хотите сохранить шаблон URL в @WebFilter
, тогда вы можете просто сделать так,
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
но вы все равно должны оставить <url-pattern>
в 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