Você realmente não pode definir a ordem de execução do filtro usando a @WebFilter
anotação. No entanto, para minimizar o web.xml
uso, basta anotar todos os filtros com apenas um filterName
para que você não precise da <filter>
definição, mas apenas <filter-mapping>
na ordem desejada.
Por exemplo,
@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}
com web.xml
exatamente isso:
<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>
Se você deseja manter o padrão de URL @WebFilter
, basta fazer o seguinte,
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
mas você ainda deve manter o <url-pattern>
em web.xml
, porque é exigido como por XSD, embora possa ser vazia:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>
Independentemente da abordagem, tudo isso falhará no Tomcat até a versão 7.0.28, porque ele engasga com a presença de <filter-mapping>
sem <filter>
. Consulte também Usando o Tomcat, o @WebFilter não funciona com o <filter-mapping> no web.xml
order
atributo de uma@WebFilterMapping
anotação aninhada . Pergunto-me se a não fazê-lo pela simplicidade