De hecho, no puede definir el orden de ejecución del filtro mediante @WebFilteranotaciones. Sin embargo, para minimizar el web.xmluso, es suficiente anotar todos los filtros con solo una filterNamepara que no necesite la <filter>definición, sino solo una <filter-mapping>definición en el orden deseado.
Por ejemplo,
@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}
con web.xmlsolo esto:
<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>
Si desea mantener el patrón de URL @WebFilter, entonces puede hacerlo,
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
pero igual deberías mantenerlo <url-pattern>adentro web.xml, porque es obligatorio según XSD, aunque puede estar vacío:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>
Independientemente del enfoque, todo esto fallará en Tomcat hasta la versión 7.0.28 porque se ahoga en presencia de <filter-mapping>sin <filter>. Consulte también Uso de Tomcat, @WebFilter no funciona con <filter-mapping> dentro de web.xml
orderatributo de una@WebFilterMappinganotación anidada . Me pregunto si no lo hicieron por simplicidad