Servlet-filter url-mapping
Wie kann ein filter zugeordnet werden, um die Wurzel einer URL? Ich bin mit Tomcat 7.0.2 und bereitstellen einer Anwendung als ROOT.Krieg. Die willkommen-Seite sign_in.xhtml. Ich würde gerne einen filter, wenn der client sendet eine Anforderung für das Stammverzeichnis der Website (d.h. der domain-name nur), oder wenn der client-Anfragen sign_in.xhtml. Hier ist was ich habe, so weit:
<filter>
<filter-name>My filter</filter-name>
<filter-class>com.myApp.myFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>My filter</filter-name>
<url-pattern>/sign_in.xhtml</url-pattern>
</filter-mapping>
Anfragen für sign_in.xhtml direkt, erfolgreich, rufen die filter, aber ich bin mir nicht sicher, wie man Anfragen nach dem root zum aufrufen des filters. Nach der Servlet-Spezifikation (version 3.0)
<url-pattern>/</url-pattern>
Karten zu den Standard-servlet und eine leere Zeichenfolge Karten an der Wurzel. Hier ist der entsprechende Abschnitt aus der spec:
"Der leere string ("") ist eine spezielle URL-Muster, das genau zu den Karten
Anwendung root-Kontext, d.h., Anfragen der form http://host:port//. In diesem Fall ist der Pfad-info '/' und dem servlet-Pfad und Kontext-Pfad ist
leerer string (““)."
Jedoch beide der folgenden url-Muster verursachen Tomcat eine exception werfen.
<url-pattern></url-pattern>
<url-pattern>""</url-pattern>
Ich würde es wirklich schätzen, wenn jemand etwas Licht in diese Schuppen. Danke.
Andrew
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
<url-pattern>/</url-pattern>
sollten für die Anforderungen auf der Wurzel. Hast du es versuchen?Wenn Ihre Absicht ist, mehr zu filtern alle Anfragen, dann sollten Sie
<url-pattern>/*</url-pattern>
.Update: ausschließen, die eine oder andere, die ich getestet habe die
url-pattern
von/
zu Tomcat 7 (mit beidenweb.xml
und@WebFilter(urlPatterns={"/"})
) und es in der Tat nicht Arbeit, wie erwartet. Dieurl-pattern
von/
jedoch funktioniert wie erwartet auf Tomcat 6 (Servlet 2.5) und auch auf Glassfish v3 (Servlet 3.0). Ich vermute einen bug in Tomcat 7, also habe ich gemeldet Problem 49914 über diese./*
die greift nur wenn der request-URI ist leer./*
und bestimmenHttpServletRequest#getRequestURI()
selbst. Wenn die URI leer ist, Versand zu/
durchRequestDispatcher#forward()
, sonst einfach weiter, die filter-chain.if-else
überprüfen? Es ist komplett vernachlässigbar.