2010-09-10 4 views
7

Comment un filtre peut-il être mappé à la racine d'une URL? J'utilise Tomcat 7.0.2 et déploie une application comme ROOT.war. La page d'accueil est sign_in.xhtml. Je voudrais lancer un filtre chaque fois que le client envoie une demande pour la racine du site (c'est-à-dire le nom de domaine uniquement), ou lorsque le client demande une signature dans le fichier .xhtml. Voici ce que j'ai jusqu'à présent:Mappage d'URL de filtre de servlet

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

Les demandes de sign_in.xhtml directement invoquer avec succès le filtre, mais je ne suis pas sûr de savoir comment obtenir les demandes de la racine d'invoquer le filtre. Selon la spécification Servlet (version 3,0)

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

cartes au servlet par défaut, et une carte de chaîne vide à la racine. Voici la section pertinente de la spécification:

« La chaîne vide (» ") est un modèle d'URL spéciale qui mappe exactement à la racine de contexte de l'application , à savoir, les demandes de la forme http://host:port//Dans ce cas, les informations de chemin. est '/' et le chemin de servlet et le chemin de contexte sont chaîne vide (""). " Toutefois, les deux modèles d'URL suivants entraînent l'émission d'une exception par Tomcat.

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

J'apprécierais vraiment que quelqu'un puisse nous éclairer là-dessus. Je vous remercie.

Andrew

Répondre

7

Le <url-pattern>/</url-pattern> devrait fonctionner pour les demandes à la racine. Est-ce que tu l'as essayé?

Si votre intention est plus de filtrer toutes les demandes, alors vous devez utiliser <url-pattern>/*</url-pattern>.


Mise à jour: Pour exclure un et l'autre, j'ai testé la url-pattern de / à Tomcat 7 (utilisant à la fois web.xml et @WebFilter(urlPatterns={"/"})) et en effet ne fonctionne pas comme prévu. Le url-pattern de / fonctionne cependant comme prévu sur Tomcat 6 (Servlet 2.5) et également sur Glassfish v3 (Servlet 3.0). Je soupçonne un bug dans Tomcat 7, donc j'ai signalé issue 49914 à ce sujet.

+0

Merci d'avoir examiné ce BalusC. J'ai l'intention de forcer la redirection si l'utilisateur doit changer son mot de passe. Un filtre semble être la solution appropriée. Je suppose que je vais devoir attendre pour 7.0.3 ou trouver quelque chose de différent. Des idées? –

+0

Un filtre écoute sur '/ *' qui n'agit que si l'URI de la requête est vide. – BalusC

+0

Je vais essayer et ensuite mettre à jour l'url-patten une fois que le bug de Tomcat est corrigé. –

Questions connexes