2009-11-18 6 views
7

Je suis nouveau au printemps Web MVC ..Comment implémenter Déconnexion fonction à l'aide Spring Web Mvc

Puis-je obtenir quelques exemples ou un lien en ligne qui me montre comment implémenter fonction de fermeture de session en utilisant mvc web du printemps?

Je ne veux pas utiliser la fonctionnalité intégrée de la sécurité à ressort (c.-à-ACEGI) ..

Merci à l'avance ...

Répondre

14

L'astuce avec l'invalidation de session ne fonctionne pas. Il semble que l'authentification Spring tamponne l'ID de session quelque part et accepte le COOKIE même si la session a été invalidée.

Une autre solution est d'effacer le contexte de sécurité du printemps manuellement:

public void manualLogout() { 
    SecurityContextHolder.getContext().setAuthentication(null); 
} 

Voici le code, comment se connecter utilisateur manuellement (si quelqu'un a besoin):

public void doManualLogin(HttpServletRequest request, String u, String p) { 
    UsernamePasswordAuthenticationToken token = 
      new UsernamePasswordAuthenticationToken(u, p); 
    token.setDetails(new WebAuthenticationDetails(request)); 
    Authentication auth = authenticationProvider.authenticate(token); 
    SecurityContextHolder.getContext().setAuthentication(auth); 
} 

où le authenticationProvider est le haricot de votre configuration de ressort qui implémente

org.springframework.security.authentication.AuthenticationProvider 
9

Il vous suffit d'invalider la session et l'utilisateur est connecté en dehors. Ceci est directement pris en charge par l'API du servlet: HttpSession.invalidate(). Vous pouvez écrire un contrôleur qui n'appelle qu'invalider.

class Logout implements Controller{ 
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){ 
    ModelAndView view = //?; 
    request.getSession().invalidate(); 
    return view; 
}  
} 
+0

mais cette façon, toujours mon exemple d'URL affiche les pages après .. – Nirmal

+0

fermeture de session Vous pouvez vérifier avec getSession (http://java.sun.com/javaee/5 /docs/api/javax/servlet/http/HttpServletRequest.html#getSession%28boolean%29) si une session est toujours active. Ou vous vous occupez de vos informations d'authentification dans la session. Vous devez le faire dans un intercepteur ou chaque contrôleur. –

+0

Vous devrez peut-être également supprimer les cookies que vous avez configurés afin de prendre en charge la fonctionnalité "remember me". Sinon, vous vous reconnecterez la prochaine fois que vous visiterez le site. – David

2
@Controller 
    public class LogoutController { 

     @RequestMapping(value="/logout",method = RequestMethod.GET) 
     public String logout(HttpServletRequest request){ 
      HttpSession httpSession = request.getSession(); 
      httpSession.invalidate(); 
      return "redirect:/"; 
     } 

    } 

S'il vous plaît utiliser le code ci-dessus pour mettre en œuvre le filtre logout

+0

comment il redirigera vers la page de connexion lorsque la session expire. Pouvez-vous s'il vous plaît fournir l'autre scénario. –

Questions connexes