In welcher Reihenfolge werden die Filter aufgerufen? [Duplikat]

8

Angenommen, ich habe folgendes in meiner web.xml

%Vor%

In welcher Reihenfolge werden die Filter aufgerufen, wenn eine Anfrage als /XYZ/abc.do kommt. Und warum?

    
Xyzxyz Xyz 29.10.2011, 09:30
quelle

2 Antworten

12

In der Reihenfolge, in der ihre Zuordnungen in web.xml definiert sind

Bei Verwendung von Annotationen ( @WebFilter ) gilt die Reihenfolge scheint nicht definiert zu sein - Sie müssen noch die <filter-mapping> -Einträge in web.xml deklarieren.

    
Bozho 29.10.2011, 09:33
quelle
14

Abschnitt 6.2.4 der Servlet-Spezifikation 3.0 :

  

Beim Verarbeiten eines <filter-mapping> -Elements mit dem <url-pattern> -Stil muss der Container anhand der Pfadzuordnungsregeln, die in Kapitel 12, "Zuordnen von Anforderungen an Servlets" definiert sind, ermitteln, ob <url-pattern> mit dem Anfrage-URI übereinstimmt.

     

Die Reihenfolge, die der Container beim Erstellen der Filterkette verwendet, die für eine bestimmte Anforderungs-URI angewendet werden soll, lautet wie folgt:

     
  1. Zuerst stimmen die <url-pattern> übereinstimmenden Filterzuordnungen in der Reihenfolge überein, in der diese Elemente im Deployment-Deskriptor erscheinen.

  2.   
  3. Als nächstes stimmen die <servlet-name> übereinstimmenden Filterzuordnungen in der Reihenfolge überein, in der diese Elemente im Deployment-Deskriptor erscheinen.

  4.   

Wenn eine Filterzuordnung sowohl <servlet-name> als auch <url-pattern> enthält, muss der Container die Filterzuordnung auf mehrere Filterzuordnungen erweitern (eine für jede <servlet-name> und <url-pattern> ), wobei die Reihenfolge der <servlet-name> und <url-pattern> elements.

Kurz gesagt: Sie werden in der Reihenfolge angewendet, in der sie in der XML-Datei erscheinen. Es wird interessant, wenn Sie eine URL treffen, die sowohl von den gebundenen Filtern <url-pattern> als auch <servlet-name> abgedeckt wird, da dann alle URL-Muster-gebundenen Filter vor allen an den Servlet-Namen gebundenen Filtern angewendet werden. Ich war noch nie in dieser Situation (ich habe noch keinen Filter gesehen, der an einen Servlet-Namen gebunden ist), aber ich denke, das könnte ziemlich verwirrend sein.

    
Barend 29.10.2011 09:45
quelle