In effetti, non è possibile definire l'ordine di esecuzione del filtro mediante l' @WebFilter
annotazione. Tuttavia, per ridurre al minimo l' web.xml
utilizzo, è sufficiente annotare tutti i filtri con solo un filterName
modo 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.xml
proprio 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
order
attributo di@WebFilterMapping
un'annotazione nidificata . Mi chiedo se non lo abbia fatto per semplicità