Peut-on utiliser des expressions régulières dans web.xml les formats d'URL?
Je suis en train d'écrire un filtre pour effectuer une tâche spécifique, mais je suis incapable de définir un modèle d'url de mon filtre. Mon filtre mappage est comme suit:
<web.xml>
<filter>
<filter-name>myFilter</filter-name>
<filter-class>test.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/org/test/*/keys/*</url-pattern>
</filter-mapping>
</web-app>
Mon url-pattern [ /org/test/* /keys/* ]
ne fonctionne pas comme je l'avais prévu.
Je suis d'appel d'url du navigateur comme:
http://localhost:8080/myapp/org/test/SuperAdminReport/keys/superAdminReport.jsp
http://localhost:8080/myapp/org/test/Adminreport/keys/adminReport.jsp
http://localhost:8080/myapp/org/test/OtherReport/keys/otherReport.jsp
Donc pour les Url ci-dessus le modèle de filtre doivent correspondre. Comment puis-je y parvenir?
- Autant que je sache, vous ne pouvez utiliser qu'un particulier contenu du dossier (
path/to/my/folder/*
) ou d'une extension particulière (*.do
) dans le urlpattern. - veuillez vous référer à la accepté de répondre à cette question
Vous devez vous connecter pour publier un commentaire.
Non, vous ne pouvez pas utiliser une regex là. Selon la Servlet Java Specification v2.4 (section srv.11.1), le chemin de l'url est interprété comme suit:
Pas regexes sont autorisés. Même pas compliqué wild-cards.
Comme indiqué par d'autres, il n'y a aucun moyen de filtre avec des expressions rationnelles en utilisant uniquement la base de servlet fonctions de filtre. La servlet spec est probablement écrite de cette manière à permettre une recherche efficace de l'url, et parce que les servlets sont antérieurs à la disponibilité des expressions régulières en java (expressions régulières sont arrivés dans java 1.4).
Expressions régulières seraient probablement moins performant (non, je n'ai pas comparé), mais si vous n'êtes pas fortement contraint par le temps de traitement et souhaitez le commerce de performance pour faciliter la configuration, vous pouvez le faire comme ceci:
Dans votre filtre:
Puis dans web.xml...
C'est aussi parfois pratique pour faire le motif d'exclure le match en inversant l'instruction if dans
doFilter()
(ou ajouter un autre init-param pour les exclut des motifs, ce qui est laissé comme exercice pour le lecteur.)Votre url ne fonctionnent pas comme il n'est pas une url valide modèle. Vous pouvez vous reporter à la réponse
URL spec
Qui ne fonctionne pas, pas de regex peut être utilisé. Essayez d'utiliser cette url pour votre application:
Et cette config pour votre web.xml:
dans
web.xml
pour le mappage des servlets , Vous pouvez appliquer générique seulement à lastart
ou laend
, si vous essayez d'appliquer le générique entre la cartographie ne seront pas repris.Les réponses précédentes sont correctes dans une url-pattern ne peut commencer ou se terminer par un sauvage de la carte de caractère, et donc le vrai pouvoir de la regex ne peut pas être utilisé.
Cependant, j'ai résolu ce problème sur des projets antérieurs, par la création d'un simple filtre par défaut qui intercepte toutes les requêtes et le filtre contient des regex pour déterminer si d'autres logique doit être appliquée. J'ai trouvé qu'il y avait peu ou pas de dégradation des performances avec cette approche.
Ci-dessous est un exemple simple qui pourrait être renforcée par le déplacement de l'expression régulière pattern à un filtre d'attribut.
Configuration de filtre à l'intérieur de la web.xml:
De base du filtre de mise en œuvre qui peut utiliser n'importe quelle expression régulière pattern (désolé, utilise du Printemps OncePerRequestFilter classe parent):