Come definire l’ordine di esecuzione del filtro servlet usando le annotazioni in WAR

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 all’interno di web.xml

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.