Servlet Filter 'Reihenfolge der Ausführung

Stolperte ich über einen bug in meiner web-Anwendung, die hatte mir meinen Kopf kratzen (und irgendwann ziehen meine Haare für eine Weile, bis ich herausfand, was Los war.

Im Grunde hatte ich 2 Filter definiert, die in meinem web.xml und die beiden Zuordnungen wie :

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <servlet-name>SpringMVCDispatcher</servlet-name>
</filter-mapping>

<filter-mapping>
    <filter-name>SpringFormMethodFilter</filter-name>
    <url-pattern>/administration/*</url-pattern>
</filter-mapping>

Sind Sie sowohl Spring MVC Filter. Mein problem war, dass die Formular-Daten, die ich bekam, war nicht so auszulegen, als UTF-8 trotz der Tatsache, dass die encodingFilter sollte setzen der request-encoding auf UTF-8, bevor irgendetwas anderes hatte die Gelegenheit zu Lesen.

Bemerkte ich schließlich, dass die Formular-filter-Methode ausgeführt wurde, BEVOR die Codierung filter, obwohl die Reihenfolge, in der filter-mappings definiert werden soll, in welcher Reihenfolge verkettet sind :

Die Reihenfolge der Filter in der Kette ist die gleiche wie die Reihenfolge, die
filter-mappings erscheinen in der web-application-deployment-descriptor.

(aus Oracle)

Wenn ich die gleiche mapping, d.h. eine Zuordnung zu einem servlet statt ein URL-Muster, für beide Zuordnungen, die Ordnung ist wiederhergestellt und alles funktioniert wie vorgesehen:

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <servlet-name>SpringMVCDispatcher</servlet-name>
</filter-mapping>

<filter-mapping>
    <filter-name>SpringFormMethodFilter</filter-name>
    <servlet-name>SpringMVCDispatcher</servlet-name>
</filter-mapping>

Ist, dass ein Teil der Servlet Spezifikation oder ist es ein Fehler von Tomcat ? Ist es irgendwo dokumentiert, soll ich einen bug report ?

Ich bin mit Tomcat 7.0.39 mit Java 7.

InformationsquelleAutor der Frage Pierre Henry | 2013-06-13

Schreibe einen Kommentar