2014-08-29 3 views
0

J'ai écrit un filtre qui devrait créer une nouvelle session après la connexion pour corriger la fixation de session. Cela devrait être appelé que lorsque les connexions utilisateur dans le système:créer une nouvelle session après identification

//variables 
public class GenerteNewSessionFilter implements Filter { 

    public static final String NEW_SESSION_INDICATOR = "cab"; 

    // destroy 
    public void destroy() { 
     // TODO Auto-generated method stub 

    } 

    @SuppressWarnings({ "unchecked", "rawtypes" }) 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

     HttpServletRequest httpRequest = (HttpServletRequest) request; 
     if (httpRequest.getSession(false) != null && httpRequest.getSession(false).getAttribute(NEW_SESSION_INDICATOR) != null) { 

      // copy session attributes from new session to a map. 
      HttpSession session = httpRequest.getSession(); 

      // HashMap old = new HashMap(); 
      HashMap<String, Object> old = new HashMap<String, Object>(); 
      Enumeration keys = (Enumeration) session.getAttributeNames(); 
      while (keys.hasMoreElements()) { 
       String key = (String) keys.nextElement(); 
       if (!NEW_SESSION_INDICATOR.equals(key)) { 
        old.put(key, session.getAttribute(key)); 
        session.removeAttribute(key); 
       } 
      } 

      // invalidation session and create new session. 
      session.invalidate(); 
      session = httpRequest.getSession(true); 

      // copy key value pairs from map to new session. 
      for (Map.Entry entry : old.entrySet()) { 
       session.setAttribute((String) entry.getKey(), entry.getValue()); 
      } 
     } 
    } 

    // initiatiliazion 
    public void init(FilterConfig filterConfig) throws ServletException { 

    } 
} 

Mais je veux l'exécuter qu'une seule fois lors de la connexion de l'utilisateur dans l'application s'il vous plaît me guider comment puis-je parvenir.

Merci.

+0

Fondamentalement, invalider la session une fois que vous vérifiez que l'utilisateur est qui vous pensez qu'ils sont. –

Répondre

1

Vous pouvez appliquer un filtre à une servlet spécifique. Alors, appliquez-le uniquement à votre servlet qui gère votre LoginAction, de cette façon, il ne s'exécutera que si l'utilisateur se connecte.

Dans votre web.xml il suffit de changer le chemin du filtre.
Modifiez votre <url-pattern> au même chemin que votre servlet.

<filter> 
    <display-name>SessionFilter</display-name> 
    <filter-name>SessionFilter</filter-name> 
    <filter-class>com.session.SessionFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>NewSessionFilter</filter-name> 
    <url-pattern>/your/path/LoginAction</url-pattern> 
</filter-mapping> 

Ou utilisez <servlet-name> plutôt que <url-pattern>

<filter-mapping> 
    <filter-name>SessionFilter</filter-name> 
    <servlet-name>LoginAction</servlet-name> 
</filter-mapping> 

Remarque vous pouvez également appliquer <ulr-pattern> à votre jsp. Que se passe-t-il si vous placez ce code à l'emplacement qui gère le POSTing des informations d'identification de l'utilisateur?
<url-pattern>/your/path/login.jsp</url-pattern>

+0

Il n'y a pas de servlet dans cette application tout pour la connexion, nous avons loginsubmit.jsp – aru

+0

comment vérifiez-vous connexion? qu'est-ce que vous utilisez lors de l'accès à une base de données pour vérifier si un utilisateur existe ou non? Et aussi vous avez des servlets de tag. – user23123412

+0

lorsque l'utilisateur soumet le login.jsp il redirige l'utilisateur à userloginsubmt.jsp dans ce jsp nous avons appelé les méthodes java pour accéder à db et pour les validations. – aru

Questions connexes