2017-03-11 2 views
0

J'ai une application web simple déployée dans Apache Tomcat qui a une page de connexion, un formulaire de téléchargement et un bouton de déconnexion. Lorsque le formulaire de connexion est soumis, je vérifie les informations d'identification et je les redirige vers la page de téléchargement si la connexion est réussie. Si ce n'est pas le cas, je redirige la demande vers la page de connexion elle-même.La connexion échoue dans Webapp déployé dans Apache Tomcat

I ont également un filtre (javax.servlet.Filter) que authentifiée si chaque demande émane d'un utilisateur connecté.

Tout fonctionnait bien hier, mais aujourd'hui, même avec un nom d'utilisateur/mot de passe valide, je suis redirigé vers la page de connexion. Cela se produit uniquement dans Chrome.

Si j'utilise Firefox ou ouvrir une fenêtre de navigation privée dans chrome le flux fonctionne parfaitement bien.

Lorsque j'ai débogué, je vois que request.session renvoie null lorsqu'une redirection est effectuée lors d'une connexion réussie.

Mon LoginServlet:

if (success) { 
     ........ 
     ........... 
     HttpSession session = request.getSession(true); 
     session.setAttribute(WebAppConstants.OAUTH_TOKEN_SESSION_ATTRIB, accessToken); 
     session.setAttribute(WebAppConstants.USER_SESSION_ATTRIB, username); 
     session.setAttribute(WebAppConstants.IS_LOGGED_IN_SESSION_ATTRIB, true); 
     session.setMaxInactiveInterval(30 * 60); 

     Cookie usernameCookie = new Cookie(WebAppConstants.USER_SESSION_ATTRIB, username); 
     usernameCookie.setMaxAge(30 * 60); 

     response.addCookie(usernameCookie); 
     response.sendRedirect(WebAppConstants.UPLOADER_JSP); 
    } else { 
     response.sendRedirect(WebAppConstants.INVALID_LOGIN_JSP); 
    } 

Mon LoginCheckFilter:

@Override 
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) 
     throws IOException, ServletException { 

    HttpServletRequest request = (HttpServletRequest) servletRequest; 
    HttpServletResponse response = (HttpServletResponse) servletResponse; 
    HttpSession session = request.getSession(false); 

    String loginURI = request.getContextPath() + "/login.html"; 
    String uri = request.getRequestURI(); 
    this.context.log("Requested Resource::" + uri); 

    if (session == null && !(uri.endsWith("html") || uri.endsWith("login"))) { 
     this.context.log("Unauthorized access request"); 
     response.sendRedirect(loginURI); 
    } else { 
     filterChain.doFilter(request, response); // Logged-in user found, so just continue request. 
    } 
} 

Pourquoi est-ce qui se passe avec le Chrome navigateur ?? Ai-je manipulé les choses correctement?

Merci Vous

+0

essayez d'effacer l'historique du navigateur, il m'a aidé une fois. –

+0

J'ai essayé de supprimer les cookies sur Chrome et cela fonctionne très bien. Cependant, je me demande quelle était la cause profonde et qu'est-ce qui s'est réellement passé ?? – Shabirmean

+0

Ce qui se passe est que parfois le navigateur peut stocker des données de requête précédentes, donc lorsque vous avez entré des informations d'identification incorrectes, il a stocké cette requête.Donc, à partir du prochain, à chaque fois que vous avez entré une information correcte, la demande précédente avec une mauvaise info a été envoyée. Ayant dit cela, je suis toujours en train d'apprendre sur jsp/servlet, donc je ne suis pas correct à 100%. –

Répondre

0

J'ai essayé de supprimer les cookies dans Chrome et ma chaîne de connexion a fonctionné sans problème. Cependant, j'essaie toujours d'avoir une compréhension claire de ce qui s'est réellement passé (avec le chrome) et comment les cookies de compensation m'ont aidé.

ÉDITÉ:

Comme par comment de Shadab Faiz-dessus de la réponse ci-dessous semble exacte et donc je suis accepter:

Ce qui se passe est que, parfois, le navigateur peut stocker des données de requête précédente. Ainsi, lorsque vous avez entré des informations d'identification incorrectes, il a stocké cette demande. Ainsi, à partir du prochain, à chaque fois que vous avez entré les informations correctes, la demande précédente avec une mauvaise information a été envoyée.

Merci