7
votes

Filtrer la cartographie de mappage de l'URL qui exclut les sous-répertoires

Y a-t-il un moyen de faire un filtrage non inclure des sous-répertoires?

Par exemple.

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


0 commentaires

5 Réponses :


-1
votes

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


0 commentaires

0
votes

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 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 cartographie et poignées en conséquence.


2 commentaires

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.



18
votes

Le modèle URL 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 Ce que vous avez l'intention de ne pas aller travailler.

Si vous souhaitez exclure xHTML dans le dossier / test uniquement, votre meilleur est vraiment un fichier écouter sur un URL-motif de *. xhtml qui fait fondamentalement le travail suivant dans dofilter () méthode: xxx

le httpservletQue # getServletPath () renvoie fondamentalement la partie de l'URI de la demande du chemin de contexte sur.

Vous pouvez si nécessaire configurer la valeur / test comme un du filtre afin que vous puissiez contrôler la valeur de l'intérieur du web.xml au lieu de le code du filtre.


1 commentaires

J'ai d'abord pensé codé dur dans le filtre? Mais l'init-param est intelligent. Ont appris quelque chose ici.



4
votes

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 xxx pré>

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>


1 commentaires

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.



0
votes

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 xxx


0 commentaires