J’utilise un filtre de servlet dans mon application JSF. J’ai trois groupes de pages Web dans mon application et je souhaite vérifier l’authentification de ces pages dans mon filtre Servlet:
mes dossiers
/Admin/ *.xhtml /Supervisor/*.xhtml /Employee/*.xhtml
et j’écris web.xml
comme
LoginFilter com.ems.admin.servlet.LoginFilter LoginFilter /Employee/* LoginFilter /Admin/* LoginFilter /Supervisor/*
mais les demandes aiment
http://localhost:8080/EMS2/faces/Html/Admin/Upload.xhtml
ne pas entrer dans le filtre.
Je dois assurer la sécurité de ces 3 dossiers.
Comment résoudre ce problème ?
Si un modèle d’URL commence par /
, alors il est relatif à la racine de contexte. Le modèle d’URL /Admin/*
ne ferait que correspondre aux pages sur http://localhost:8080/EMS2/Admin/*
(en supposant que /EMS2
soit le chemin de contexte), mais vous les avez actuellement sur http://localhost:8080/EMS2/faces/Html/Admin/*
, votre modèle d’URL ne correspond donc jamais.
Vous devez préfixer vos modèles d’URL avec /faces/Html
aussi bien ainsi:
/faces/Html/Admin/*
Vous pouvez également simplement reconfigurer la structure / configuration de votre projet Web afin de pouvoir supprimer le chemin d’access /faces/Html
dans les URL afin que vous puissiez simplement ouvrir la page par exemple http://localhost:8080/EMS2/Admin/Upload.xhtml
.
Votre syntaxe de mappage de filtre convient parfaitement. Cependant, un moyen plus simple de spécifier plusieurs modèles d’URL consiste à utiliser uniquement une
avec plusieurs entrées
:
LoginFilter /faces/Html/Employee/* /faces/Html/Admin/* /faces/Html/Supervisor/*
Si vous utilisez la méthode d’annotation pour la définition de filtre (au lieu de la définir dans le web.xml
), vous pouvez le faire en mettant simplement un tableau de mappages dans l’annotation @WebFilter
:
/** * Filter implementation class LoginFilter */ @WebFilter(urlPatterns = { "/faces/Html/Employee","/faces/Html/Admin", "/faces/Html/Supervisor"}) public class LoginFilter implements Filter { ...
Et juste comme un FYI, cette même chose fonctionne pour les servlets utilisant l’annotation de servlet aussi:
/** * Servlet implementation class LoginServlet */ @WebServlet({"/faces/Html/Employee", "/faces/Html/Admin", "/faces/Html/Supervisor"}) public class LoginServlet extends HttpServlet { ...