In effetti, non è possibile definire l'ordine di esecuzione del filtro mediante l' @WebFilterannotazione. Tuttavia, per ridurre al minimo l' web.xmlutilizzo, è sufficiente annotare tutti i filtri con solo un filterNamemodo che non sia necessaria la <filter>definizione, ma solo una <filter-mapping>definizione nell'ordine desiderato.
Per esempio,
@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}
con web.xmlproprio in questo:
<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 desideri mantenere attivo il pattern URL @WebFilter, puoi farlo in questo modo,
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
ma dovresti comunque tenerlo <url-pattern>dentro web.xml, perché è richiesto come da XSD, anche se può essere vuoto:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>
Indipendentemente dall'approccio, tutto ciò fallirà in Tomcat fino alla versione 7.0.28 perché soffoca in presenza di <filter-mapping>senza <filter>. Vedi anche Utilizzando Tomcat, @WebFilter non funziona con <filter-mapping> all'interno di web.xml
orderattributo di@WebFilterMappingun'annotazione nidificata . Mi chiedo se non lo abbia fatto per semplicità