Se definiamo filtri servlet specifici per webapp nel proprio web.xml
WAR, l’ordine di esecuzione dei filtri sarà lo stesso dell’ordine in cui sono definiti nel web.xml
.
Ma, se definiamo questi filtri usando @WebFilter
annotazione @WebFilter
, qual è l’ordine di esecuzione dei filtri e come possiamo determinare l’ordine di esecuzione?
In effetti, non puoi definire l’ordine di esecuzione del filtro usando @WebFilter
annotazione @WebFilter
. Tuttavia, per ridurre al minimo l’utilizzo di web.xml
, è sufficiente annotare tutti i filtri con solo un filterName
modo che non sia necessaria la definizione
, ma solo una definizione
nell’ordine desiderato.
Per esempio,
@WebFilter(filterName="filter1") public class Filter1 implements Filter {} @WebFilter(filterName="filter2") public class Filter2 implements Filter {}
con in web.xml
solo questo:
filter1 /url1/* filter2 /url2/*
Se desideri mantenere il pattern URL in @WebFilter
, puoi fare semplicemente così,
@WebFilter(filterName="filter1", urlPatterns="/url1/*") public class Filter1 implements Filter {} @WebFilter(filterName="filter2", urlPatterns="/url2/*") public class Filter2 implements Filter {}
ma dovresti comunque mantenere
in web.xml
, perché è richiesto come da XSD, sebbene possa essere vuoto:
filter1 filter2
Indipendentemente dall’approccio, tutto questo fallirà in Tomcat fino alla versione 7.0.28 perché soffoca sulla presenza di
senza
. Vedi anche Utilizzo di Tomcat, @WebFilter non funziona con
Le specifiche Servlet 3.0 non sembrano fornire un suggerimento su come un contenitore dovrebbe ordinare i filtri che sono stati dichiarati tramite annotazioni. È chiaro come su come ordinare i filtri tramite la loro dichiarazione nel file web.xml, però.
Stai attento. Utilizza i filtri per l’ordine dei file web.xml con interdipendenze. Cerca di rendere i tuoi filtri indipendenti dall’ordine per ridurre al minimo la necessità di utilizzare un file web.xml.
Purtroppo devi ancora fare un po ‘di XML.
Controlla la sezione delle specifiche 8.2 e aggiungi i bit necessari al tuo web.xml o web-fragment.xml, a seconda della confezione. Nota questi sono
In un web.xml puoi filtrare ed ascoltare per nome:
FirstFilter NextFilter
In un web-fragment.xml puoi filtrare e ascoltare gli ascoltatori prima o dopo gli altri come specificato dal nome o genericamente con il tag “altri”. Ad esempio, per provare ad ordinare il tuo JAR, usa quanto segue in web-fragment.xml
Si noti che gli ordini web-fragment.xml per JAR e i filtri o gli ascoltatori all’interno dello stesso JAR vengono ordinati in modo arbitrario, a meno che non siano specificati nel web.xml dell’applicazione.