Intercepter les pages JSP et vérifier s'ils sont connectés
Récemment, j'ai utilisé Struts2 pour réaliser un projet et j'avais besoin d'intercepter JSP pour vérifier s'il a été enregistré, mais la chaîne de filtre de Struts2 ne peut filtrer que des actions. Plus tard, j'ai trouvé que dans web.xml, le filtre de la classe d'implémentation javax.servlet.filter peut être directement ajouté au filtre JSP. Veuillez consulter le code
Classe de mise en œuvre de filtre
<span style = "font-size: 18px;"> package com.common; Importer java.io.ioException; import javax.servlet.filter; Importer javax.servlet.filterchain; Importer javax.servlet.filterconfig; Importer javax.servlet.servletException; Importer javax.servlet.servletRequest; import javax.servlet.servletResponse; import javax.servlet.http.httpservlet; Importer javax.servlet.httpservlet; Importer javax.servlet.httpservlet; Importer Javax.servlet. javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; La classe publique LoginFilter étend HttpServlet implémente filtre {private static final long SerialVersionUID = 1l; @Override public void dofilter (ServLetRequest Request, ServletResponse Response, filterChain Chain) lève IOException, servlexception {httpservletRequest req = (httpservletRequest) request; HttpServletResponse Res = (httpServletResponse) Réponse; String path = req.getContextPath (); String indexPath = req.getscheme () + ": //" + req.getServerName () + ":" + req.getServerport () + path + "/pages/login.jsp"; if (req.getRequeSturi (). Endswith ("login.jsp")) {chain.dofilter (request, réponse); retour; } Objet LoginUser = req.getSession (). GetAttribute ("<strong> <span style =" Color: # ff0000; "> LoginSession </span> </strong>"); if (LoginUser == null) {res.sendRedirect (indexPath); retour; } chain.dofilter (demande, réponse); } @Override public void init (filterconfig arg0) lève servletException {// Todo Méthode générée automatiquement Stub}} </span> Méthode de connexion:
<span style = "font-size: 18px;"> public String Login () {Login Login = new Login (); //.....Check Informations de connexion ActionContext ctx = actionContext.getContext (); Map <string, objet> session = ctx.getSession (); session.put ("<strong> <span style =" Color: # ff0000; "> LoginSession </span> </strong>", connexion); retourner le "succès"; } </span> Configuration web.xml
<filter> <filter-name> setlog </ filter-name> <filter-class> com.common.loginfilter </ filter-Class> </ Filter> <Lilter-Mapping> <Filter-Name> setlog </rilter-name> <Url-Pattern> /pages/Home.jsp </url-Pattern> <Url-Pattern> / Pages / Channel / * </ url-Pattern> <Url-Pattern> / Pages / Content / * </ Url-Pattern> <Url-Pattern> / Pages / Product / * </ url-Pattern> </ Filter-Pattern>
Notez que si une trame est utilisée sur la page, elle peut provoquer le temps de la session et se connecter à la page de connexion. À l'heure actuelle, la page de connexion s'affiche sur une sous-page du cadre. Solution: ajoutez le code suivant à la page de connexion.
<span style = "font-size: 18px;"> <script linguisse = "javascript"> if (top! = window) top.location.href = window.location.href; </cript> </span>
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!