2011-11-04 3 views
2

Possible en double:
Prevent user from going back to the previous secured page after logoutsession de Invalidation en JSP - Servlet

Je me demandais comment invalident session JSP et servlets. Sur mon site Web, une personne qui se connecte à la page de connexion, mais en cliquant sur le bouton précédent, il peut accéder à la page précédente. Je ne suis pas capable de comprendre où mettre session.invalidate()

Et plus loin où devrais-je l'invalider, sur login.jsp ou mes autres pages web quand une personne se déconnecte.

Ma classe de filtre: -

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; 

import javax.servlet.annotation.WebFilter; 


public class LoginFilter implements Filter{ 


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




      HttpSession session = request.getSession(false); 

      if (session == null || session.getAttribute("currentSessionUser") == null) { 
       response.sendRedirect("Loginpage.jsp"); // No logged-in user found, so redirect to login page. 

       response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
       response.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
       response.setDateHeader("Expires", 0); 
      } else { 
       chain.doFilter(req, res); // Logged-in user found, so just continue request. 
      } 
     } 

} 

En web.xml j'ai écrit: -

<filter> 
     <filter-name>loginFilter</filter-name> 
     <filter-class>LoginFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>loginFilter</filter-name> 
     <url-pattern>/ARMS/*</url-pattern> 
    </filter-mapping> 

Sur mon Loginpage.jsp je viens d'écrire

<% 
session.invalidate(); 
%> 

C'est OK? Deuxièmement, je ne suis pas clair sur la structure du répertoire. Je suis en train de mettre des captures d'écran .. enter image description here

J'utilise le serveur apache tomcat 5.5, donc je suppose que je ne devrais pas mettre l'annotation de modèle d'URL dans la classe de filtre non? car il est uniquement pris en charge dans Tomcat 7 et ci-dessus.

+0

Est-ce que la session est invalidée ('session.invalidate()') lors de la déconnexion? –

+0

@BheshGurung - J'ai écrit session.invalidate sur la page de connexion. Est-ce faux? "Déconnexion" est un lien hypertexte vers la page de connexion – Dhruv

+0

On dirait que vous redirigez vers la page de connexion lorsque l'utilisateur clique sur le lien "Déconnexion" et que dans cette page vous invalidez la session en premier et présentez le formulaire de connexion. Si c'est le cas, alors il n'y a rien de mal avec votre code. Le problème est que votre page est mise en cache par le navigateur, ce que le navigateur affiche lorsque l'utilisateur clique sur le bouton Précédent. Pour gérer ce problème, suivez le message de BalusC ci-dessus dans le premier commentaire. –

Répondre

0

Invalidez la session du servlet ou de la JSP à laquelle vous accédez lorsqu'un utilisateur se déconnecte. D'une manière grossière, vous pouvez vérifier si une session existe sur chaque page qu'un utilisateur va.

Jetez un oeil à ce fil, il a quelques réponses que vous cherchez.

http://forums.devx.com/showthread.php?t=146975

0

-je utiliser un servlet dans le seul but de fermeture de session. Lorsqu'un utilisateur clique sur le bouton de déconnexion, il les redirige vers cette page, qui vérifie à son tour une session active et, s'il en trouve une, appelle session.invalidate() puis redirige l'utilisateur vers la page d'accueil (ou là où vous le souhaitez).

HttpSession session = request.getSession(false); 

if(session != null){ 
    session.invalidate(); 
    RequestDispatcher rd = request.getRequestDispatcher("Loginpage.jsp"); 
    rd.forward(request, response); 
} else { 
    //There is no session. Redirect somewhere 
} 

Ceci est juste un exemple rapide.

+1

c'est quand l'utilisateur frappe le "déconnecter" mais pas le bouton de retour du navigateur, corrigez-moi si je me trompe.thanks – Dhruv