2010-09-10 12 views
7

Wie kann ein Filter dem Stamm einer URL zugeordnet werden? Ich verwende Tomcat 7.0.2 und stelle eine Anwendung als ROOT.war bereit. Die Begrüßungsseite ist sign_in.xhtml. Ich möchte einen Filter immer ausführen, wenn der Client eine Anforderung für das Stammverzeichnis der Site sendet (d. H. Nur den Domänennamen) oder wenn der Client sign_in.xhtml anfordert. Hier ist, was ich bisher:Servlet-Filter-URL-Zuordnung

<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> 

Anträge auf sign_in.xhtml direkt, erfolgreich den Filter aufrufen, aber ich bin nicht sicher, wie die Anforderung von der Wurzel zu erhalten, den Filter zu berufen. Gemäß der Servlet-Spezifikation (Version 3,0)

<url-pattern>/</url-pattern> 

Karten auf den Standard Servlet und eine leere Zeichenfolge Karten an die Wurzel. Hier ist der relevante Abschnitt aus der Spezifikation:

„Die leeren Zeichenfolge (“ ") ist ein spezielles URL-Muster, das genau abbildet Kontext root Anwendung, dh Anfragen der Form http://host:port//In diesem Fall wird die Pfadangabe. ist '/' und der Servlet Pfad und Kontext Pfad ist leere Zeichenfolge (""). "

Beide der folgenden URL-Muster bewirken jedoch, dass Tomcat eine Ausnahme auslöst.

Ich würde es wirklich schätzen, wenn jemand etwas Licht darauf werfen könnte. Danke.

Andrew

Antwort

7

Die <url-pattern>/</url-pattern> sollte auf die Wurzel für Anfragen arbeiten. Hast Du es versucht?

Wenn Ihre Absicht mehr ist, alle Anfragen zu filtern, dann sollten Sie <url-pattern>/*</url-pattern> verwenden.


aktualisieren: eine und andere auszuschließen, testete ich die url-pattern von / bei Tomcat 7 (sowohl web.xml und @WebFilter(urlPatterns={"/"}) verwendet wird) und es hat in der Tat nicht wie erwartet. Die url-pattern von / funktioniert jedoch wie erwartet auf Tomcat 6 (Servlet 2.5) und auch auf Glassfish v3 (Servlet 3.0). Ich vermute einen Fehler in Tomcat 7, also habe ich issue 49914 darüber berichtet.

+0

Danke, dass Sie sich dieses BalusC angesehen haben. Ich beabsichtige Umleitung zu erzwingen, wenn der Benutzer sein Passwort ändern muss. Ein Filter scheint die richtige Lösung zu sein. Ich denke, ich muss auf 7.0.3 warten oder mir etwas anderes einfallen lassen. Irgendwelche Ideen? –

+0

Ein Filter, der auf '/ *' hört, der nur dann aktiv wird, wenn der Anforderungs-URI leer ist. – BalusC

+0

Ich werde es versuchen und dann die URL-Patten aktualisieren, sobald der Tomcat-Bug behoben ist. –