Donner plusieurs modèles d’URL au filtre de servlet

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