Y a-t-il un moyen de faire un filtrage non inclure des sous-répertoires? P>
Par exemple. P>
J'ai des fichiers .xhtml dans ma racine de contexte et j'ai également un sous-dossier appelé "test" avec des fichiers avec la même extension. Y a-t-il une mai à mapper un filtre dans les fichiers de la racine de contexte et non aux fichiers du répertoire "Test"? P>
5 Réponses :
Certains conteneurs (comme la résine) définissent une extension à la définition de mappage de filtrage dans web.xml qui permet de spécifier url-regexp code> qui permet de correspondre aux URL en fonction de l'expression régulière. ( Référence ). Voyez si votre conteneur a quelque chose comme ça. p>
Utilisation de ce qui est disponible pour des servlets / filtres standard, il n'y a pas de moyen direct d'exclure le sous-répertoire, car *. ext code> Les mappages de style incluent des sous-répertoires. Vous pouvez contourner cela en déclarant un autre filtre qui gère spécifiquement le
/ test / *. XHTML code> cartographie et poignées en conséquence. P>
Mais un filtre avec mappage / * incluait toujours tout sous / test ne serait-il pas?
C'est correct. Je pensais que le premier correspondant est celui utilisé, mais ce n'est pas le cas. Au lieu de cela, vous pouvez ajouter une vérification de l'URL Regex dans votre filtre - si elle correspond à la regex, le filtre effectue son travail avant de déléguer à la chaîne de filtrage renvoyante. Si la regex ne correspond pas à la chaîne du filtre sans faire de travail.
Le modèle Si vous souhaitez exclure xHTML dans le dossier le Vous pouvez si nécessaire configurer la valeur URL code> est en effet restrictif dans la correspondance. Il n'autorise que le matchnig exactement, préfixe ou suffixe. Pas d'intermédiaire / global / regex correspondant. Alors par exemple
/ *. XHTML CODE> Ce que vous avez l'intention de ne pas aller travailler.
/ test code> uniquement, votre meilleur est vraiment un fichier
code> écouter sur un
URL-motif code> de
*. xhtml code> qui fait fondamentalement le travail suivant dans
dofilter () code> méthode: p>
httpservletQue # getServletPath () code >
renvoie fondamentalement la partie de l'URI de la demande du chemin de contexte sur. p> / test code> comme un
web.xml code> au lieu de le code du filtre. p> p>
J'ai d'abord pensé codé dur dans le filtre? Mais l'init-param est intelligent. Ont appris quelque chose ici.
La solution, en gros, vous avez besoin de votre classe de filtrage et définissez excluant les URL à l'exclusion des URL init-param pour le filtre et définir les URL du filtre, mappage et exclude dans web.xml p > <filter>
<filter-name>LoginValidationFilter</filter-name>
<filter-class>test.LoginValidationFilter</filter-class>
<init-param>
<param-name>loginPage</param-name>
<param-value>/login.jsp</param-value>
</init-param>
<init-param>
<param-name>excludedURLs</param-name>
<param-value>/admin/;/assets/;/content/;/css/;/js/;/login.jsp;/login.cmd;/logout.cmd;forgot_password.jsp;pageName=</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoginValidationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Désolé, c'est mon premier message, cela m'a fallu environ 30 minutes pour corriger le format. La solution, en gros, vous avez besoin de votre propre classe de filtres et de définir des URL à l'exclusion des URL init-param pour le filtre.
Vous pouvez ajouter une valeur de mappage d'URL pour chaque fichier que vous avez dans la racine de contexte. Par conséquent, le filtre s'appliquera à ces fichiers, mais aucun aux fichiers dans le dossier de test (il ne s'appliquera réellement à ces fichiers spécifiques). Les suivants ont fonctionné pour moi