Вы действительно не можете определить порядок выполнения фильтра с помощью @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 не работает с <filter-mapping> внутри web.xml
order
атрибут вложенной@WebFilterMapping
аннотации. Интересно, не сделал ли это для простоты