69 votes

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

Je suis à l'aide de Filtre de Servlet dans mon application JSF

J'ai trois groupes de pages Web dans mon application

je tiens donc à vérifier l'authenticité de cette partical pages dans mon Filtre de Servlet

mes Dossiers

/Admin/ *.xhtml

/Supervisor/*.xhtml
/Employee/*.xhtml

et je suis en train d'écrire web.xml comme

<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.ems.admin.servlet.LoginFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/Employee/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/Admin/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/Supervisor/*</url-pattern>
</filter-mapping>

mais les requêtes comme

http://localhost:8080/EMS2/faces/Html/Admin/Upload.xhtml

n'entrant pas dans le Filtre. J'ai pour assurer la sécurité de ces 3 dossiers

Comment résoudre ce problème ?

123voto

BalusC Points 498232

Si un modèle d'URL commence par /, puis il est relatif à la racine de contexte. L' /Admin/* modèle d'URL correspondra uniquement aux pages sur http://localhost:8080/EMS2/Admin/* (en supposant que l' /EMS2 est le chemin de contexte), mais vous en avez fait sur http://localhost:8080/EMS2/faces/Html/Admin/*, de sorte que votre modèle d'URL ne correspond jamais avec.

Vous avez besoin de préfixe de votre URL de motifs avec de la /faces/Html ainsi comme suit:

<url-pattern>/faces/Html/Admin/*</url-pattern>

Vous pouvez aussi simplement reconfigurer votre projet web/structure de la configuration, de sorte que vous pouvez vous débarrasser de l' /faces/Html chemin dans l'Url, de sorte que vous pouvez simplement ouvrir la page, par exemple, en http://localhost:8080/EMS2/Admin/Upload.xhtml.

Votre filtre mappage de syntaxe est toute fine. Cependant, un moyen plus simple de spécifier plusieurs formats d'URL est simplement utiliser un seul <filter-mapping> avec de multiples <url-pattern> entrées:

<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/faces/Html/Employee/*</url-pattern>
    <url-pattern>/faces/Html/Admin/*</url-pattern>
    <url-pattern>/faces/Html/Supervisor/*</url-pattern>
</filter-mapping>

15voto

Michael Plautz Points 127

Si vous utilisez la méthode d'annotation pour la définition de servlet (au lieu de les définir dans les web.xml ), vous pouvez le faire en mettant simplement un tableau de mappages de servlets dans l'annotation @WebServlet :

 /**
 * Servlet implementation class LoginFilter
 */
@WebServlet({"/faces/Html/Employee", "/faces/Html/Admin", "/faces/Html/Supervisor"})
public class LoginFilter extends HttpServlet {
    ...
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X