Vous ne pouvez en effet pas définir l'ordre d'exécution du filtre à l'aide de l' @WebFilter
annotation. Cependant, pour minimiser l' web.xml
utilisation, il suffit d'annoter tous les filtres avec juste un filterName
pour que vous n'ayez pas besoin de la <filter>
définition, mais juste d'une <filter-mapping>
définition dans l'ordre souhaité.
Par exemple,
@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}
avec web.xml
juste ça:
<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 vous souhaitez conserver le modèle d'URL @WebFilter
, vous pouvez simplement le faire,
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
mais vous devriez toujours garder le <url-pattern>
in web.xml
, car il est requis selon XSD, bien qu'il puisse être vide:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>
Quelle que soit l'approche, tout cela échouera dans Tomcat jusqu'à la version 7.0.28 car il s'étouffe en présence de <filter-mapping>
sans <filter>
. Voir aussi Utilisation de Tomcat, @WebFilter ne fonctionne pas avec <filter-mapping> dans web.xml
order
attribut d'@WebFilterMapping
annotation imbriquée . Je me demande si le n'a pas fait pour la simplicité