So definieren Sie die Ausführungsreihenfolge des Servlet-Filters mithilfe von Anmerkungen in WAR
167
Wenn wir webapp-spezifische Servlet-Filter in WARs eigenen definieren web.xml, entspricht die Ausführungsreihenfolge der Filter der Reihenfolge, in der sie in der definiert sind web.xml.
Wenn wir diese Filter jedoch mithilfe von @WebFilterAnmerkungen definieren, wie ist die Ausführungsreihenfolge der Filter und wie können wir die Ausführungsreihenfolge bestimmen?
Sie können die Filterausführungsreihenfolge in der Tat nicht mithilfe von @WebFilterAnmerkungen definieren. Um die web.xmlVerwendung zu minimieren , ist es jedoch ausreichend, alle Filter mit nur einem zu versehen, filterNamesodass Sie nicht die <filter>Definition, sondern nur eine <filter-mapping>Definition in der gewünschten Reihenfolge benötigen .
Sie hätten ein orderAttribut einer verschachtelten @WebFilterMappingAnnotation einführen können . Ich frage mich, ob die es der Einfachheit halber nicht getan haben
Bozho
12
@Bozho: Das wäre nicht spezifisch genug. Was ist, wenn Ihre Webanwendung mit Bibliotheken von Drittanbietern geliefert wird, die einen Filter enthalten? Es ist schwer, die Reihenfolge vorher zu sagen.
BalusC
1
@BalusC: In Ihrem Beispiel ist ein Fehler aufgetreten: Das URL-Muster wird mit einem Filternamen geschlossen.
Andrew Bourgeois
3
@ AndrewBourgeois: Behoben. War ein Copypaste-Fehler. Schade, dass der Markdown-Editor keine eingebaute XML-Validierung wie in Eclipse hat;)
BalusC
6
Die Verwendung <url-pattern />funktioniert in JBoss EAP 6.1 nicht - es überschreibt den @WebFilterWert und verhindert, dass der Filter überhaupt ausgeführt wird.
Seanf
12
Die Servlet 3.0-Spezifikation scheint keinen Hinweis darauf zu geben, wie ein Container Filter bestellen soll, die über Anmerkungen deklariert wurden. Es ist jedoch klar, wie Filter über ihre Deklaration in der Datei web.xml bestellt werden können.
Sicher sein. Verwenden Sie die Dateibestellungsfilter web.xml, die voneinander abhängig sind. Versuchen Sie, die Reihenfolge Ihrer Filter unabhängig zu gestalten, um die Verwendung einer web.xml-Datei zu minimieren.
Ich habe viele Servlet-Filter in meinem Projekt, von denen nur ein bestimmter Filter zuerst aufgerufen werden muss und die Reihenfolge anderer Filter kein Problem darstellt. Muss ich alle Filter in web.xml verunreinigen? Oder gibt es Abkürzungen?
order
Attribut einer verschachtelten@WebFilterMapping
Annotation einführen können . Ich frage mich, ob die es der Einfachheit halber nicht getan haben<url-pattern />
funktioniert in JBoss EAP 6.1 nicht - es überschreibt den@WebFilter
Wert und verhindert, dass der Filter überhaupt ausgeführt wird.Die Servlet 3.0-Spezifikation scheint keinen Hinweis darauf zu geben, wie ein Container Filter bestellen soll, die über Anmerkungen deklariert wurden. Es ist jedoch klar, wie Filter über ihre Deklaration in der Datei web.xml bestellt werden können.
Sicher sein. Verwenden Sie die Dateibestellungsfilter web.xml, die voneinander abhängig sind. Versuchen Sie, die Reihenfolge Ihrer Filter unabhängig zu gestalten, um die Verwendung einer web.xml-Datei zu minimieren.
quelle