De hecho, no puede definir el orden de ejecución del filtro mediante @WebFilter
anotaciones. Sin embargo, para minimizar el web.xml
uso, es suficiente anotar todos los filtros con solo una filterName
para 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.xml
solo 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
order
atributo de una@WebFilterMapping
anotación anidada . Me pregunto si no lo hicieron por simplicidad