2013-08-20 4 views
0

J'essaie d'ajouter un filtre entre certaines servlets et jsp pour l'utilisateur connecté avant d'afficher le jsp. Le problème est que j'essaye de récupérer l'URL du navigateur qui a été transféré à la page de connexion, mais je ne peux pas trouver comment. J'ai essayé d'obtenir l'URI au filtre et de l'envoyer en tant qu'attribut d'une requête au Connexion servlet mais cela ne fonctionne pas.obtenir l'URL du navigateur

mon doFilter()

package com.forum.filters; 

import java.io.IOException; 

import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

public class RestrictionFilter implements Filter { 
    public static final String CONNEXION = "/WEB-INF/connexion.jsp"; 
    public static final String ATT_USER = "utilisateur"; 
    public static final String CHEMIN = "chemin"; 

    public void destroy() { 

    } 

    public void doFilter(ServletRequest req, ServletResponse res, 
      FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 

     String chemin = request.getRequestURI().substring(
       request.getContextPath().length()); 

     HttpSession session = request.getSession(); 

     if (session.getAttribute(ATT_USER) == null) { 
      request.setAttribute(CHEMIN, chemin); 
      request.getRequestDispatcher(CONNEXION).forward(request, response); 
     } else { 
      chain.doFilter(request, response); 
     } 
    } 

    public void init(FilterConfig fConfig) throws ServletException { 

    } 

} 

mon servlet de Connexion

package com.forum.servlets; 

import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import com.forum.beans.Utilisateur; 
import com.forum.form.ConnexionForm; 

public class Connexion extends HttpServlet { 
    public static final String ATT_USER = "utilisateur"; 
    public static final String ATT_FORM = "form"; 
    public static final String VUE = "/WEB-INF/connexion.jsp"; 

    public void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     this.getServletContext().getRequestDispatcher(VUE) 
       .forward(request, response); 
    } 

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     ConnexionForm form = new ConnexionForm(); 
     String chemin = (String) request.getAttribute("chemin"); 

     Utilisateur utilisateur = form.connecterUtilisateur(request); 

     HttpSession session = request.getSession(); 

     if (form.getErreurs().isEmpty()) { 
      session.setAttribute(ATT_USER, utilisateur); 
      if (chemin == null || chemin.startsWith("/connexion")) 
       response.sendRedirect("/projetForum/forum"); 
      else 
       response.sendRedirect("/projetForum" + chemin); 
     } else { 
      request.setAttribute(ATT_USER, null); 
      request.setAttribute(ATT_FORM, form); 
      this.getServletContext().getRequestDispatcher(VUE) 
        .forward(request, response); 
     } 
    } 
} 

quelques balises de web.xml

<servlet> 
<servlet-name>Connexion</servlet-name> 
<servlet-class>com.forum.servlets.Connexion</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>Connexion</servlet-name> 
<url-pattern>/connexion</url-pattern> 
</servlet-mapping> 
<filter> 
    <filter-name>RestrictionFilter</filter-name> 
    <filter-class>com.forum.filters.RestrictionFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>RestrictionFilter</filter-name> 
    <servlet-name>Nouveau</servlet-name> 
    <servlet-name>Profil</servlet-name> 
    <servlet-name>Editer</servlet-name> 
    <servlet-name>Repondre</servlet-name> 
</filter-mapping> 
+0

Je ne pouvais pas comprendre votre question: _Je essaie de récupérer l'URL du navigateur avec lequel il a été envoyé à la page de connexion, mais je reçois partout d'un peu now_ – gerrytan

+0

Oh désolé, J'ai mis à jour mon message. J'espère que c'est plus compréhensible. –

Répondre

0

Je vois à partir de votre filtre que vous avez déjà enregistré l'URL de provenance en utilisant request.setAttribute(CHEMIN, chemin); avant de l'envoyer à la page de connexion. Dans ce cas, votre connexion jsp (je suppose que cela est /WEB-INF/connexion.jsp), vous pouvez simplement insérer un champ de formulaire caché:

<form ...> 
    <input type="hidden" name="referrer" value="<%= request.getAttribute("chemin") %>"/> 
    ... 
</form> 

Lorsque le formulaire est soumis, vous pouvez récupérer l'URL referrer via le paramètre de requête référante '

+0

J'ai testé la façon dont j'ai défini l'URL de référence ne fonctionne pas –

+0

Mis à jour ma réponse pour utiliser '<% = request.getAttribute (" chemin ")%>'. Je pense que si vous utilisez le répartiteur de demande EL n'évalue pas correctement – gerrytan

Questions connexes