So definieren Sie die Reihenfolge der Servletfilter für die Ausführung mithilfe von Anmerkungen in WAR

Wenn wir webapp-spezifische Servlet-Filter in der eigenen web.xml WAR definieren, entspricht die Reihenfolge der Ausführung der Filter der Reihenfolge, in der sie in der web.xml definiert sind.

Aber wenn wir diese Filter mit @WebFilter Annotation definieren, wie lautet die Reihenfolge der Ausführung von Filtern und wie können wir die Reihenfolge der Ausführung bestimmen?

   

Sie können die Reihenfolge der Filterausführung nicht mit der @WebFilter Annotation definieren. Um die Verwendung von web.xml zu minimieren, reicht es jedoch aus, alle Filter mit nur einem filterName zu kommentieren, sodass Sie nicht die -Definition, sondern nur eine -Definition in der gewünschten Reihenfolge benötigen.

Beispielsweise,

 @WebFilter(filterName="filter1") public class Filter1 implements Filter {} @WebFilter(filterName="filter2") public class Filter2 implements Filter {} 

mit in web.xml nur das:

  filter1 /url1/*   filter2 /url2/*  

Wenn du das URL-Muster in @WebFilter behalten @WebFilter , kannst du es einfach so machen,

 @WebFilter(filterName="filter1", urlPatterns="/url1/*") public class Filter1 implements Filter {} @WebFilter(filterName="filter2", urlPatterns="/url2/*") public class Filter2 implements Filter {} 

Sie sollten jedoch das in web.xml , da es gemäß XSD erforderlich ist, obwohl es leer sein kann:

  filter1    filter2   

Unabhängig von der Vorgehensweise wird dies bei Tomcat bis Version 7.0.28 fehlschlagen, da es bei Vorhandensein von ohne drosselt. Siehe auch Verwenden von Tomcat, @WebFilter funktioniert nicht mit in web.xml

Die Servlet 3.0-Spezifikation scheint keinen Hinweis darauf zu geben, wie ein Container Filter ordnen sollte, die über Annotationen deklariert wurden. Wie man Filter über ihre Deklaration in der Datei web.xml anordnet, ist jedoch klar.

Sicher sein. Verwenden Sie die web.xml-Dateireihenfolgefilter, die gegenseitige Abhängigkeiten aufweisen. Versuchen Sie, Ihre Filter unabhängig von der Reihenfolge zu gestalten, um die Verwendung einer web.xml-Datei zu minimieren.

Leider muss man noch auf ein wenig XML zurückgreifen.

Überprüfen Sie den Spezifikationsabschnitt 8.2 und fügen Sie die benötigten Bits je nach Ihrer Verpackung zu Ihrer Datei web.xml oder web-fragment.xml hinzu. Beachten Sie diese sind

In einer web.xml können Filter und Listener nach Namen sortiert werden:

  FirstFilter NextFilter  

In einer web-fragment.xml können Sie Filter und Listener vor oder nach anderen filtern, wie namentlich oder generisch mit dem Tag “others” angegeben. Um zum Beispiel zu versuchen, Ihr JAR zuerst zu bestellen, verwenden Sie Folgendes in der Datei web-fragment.xml

      

Beachten Sie, dass die Datei “web-fragment.xml” für die JAR-Datei bestellt und Filter oder Listener in derselben JAR-Datei beliebig angeordnet sind, sofern sie nicht in der Web.xml der Anwendung angegeben sind.