2009-11-18 12 views
7

Soy nuevo en la primavera Web MVC ..Cómo implementar la característica Salir utilizando Spring Web MVC

¿Puedo obtener algún ejemplo o un enlace en línea que me muestra cómo implementar la función de cierre de sesión utilizando MVC primavera web?

no quiero utilizar la característica incorporada en la primavera de la seguridad (es decir ACEGI) ..

Gracias de antemano ...

Respuesta

14

El truco con la invalidación de la sesión no funciona. Parece que la autenticación de Spring almacena la ID de la sesión en algún lugar y acepta la COOKIE incluso si la sesión se invalida.

Otra solución es eliminar el contexto de seguridad del resorte manualmente:

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

Aquí está el código, cómo iniciar una sesión de usuario manualmente (si alguien necesita):

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); 
} 

donde el AuthenticationProvider es el frijol de su configuración de resorte que implementa

org.springframework.security.authentication.AuthenticationProvider 
9

Sólo tiene que invalidar la sesión y se registra el usuario fuera. Esto es soportado directamente por el servlet api: HttpSession.invalidate(). Puede escribir un controlador que solo llame invalide.

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

pero de esta manera, sigue siendo mi ejemplo de URL mostrará las páginas después de cerrar la sesión .. – Nirmal

+0

Usted puede consultar con getSession (http://java.sun.com/javaee/5 /docs/api/javax/servlet/http/HttpServletRequest.html#getSession%28boolean%29) si una sesión todavía está activa. O cuida su información de autenticación en la sesión. Tienes que hacer esto en un interceptor o en cada controlador. –

+0

Es posible que también deba borrar las cookies que haya configurado para admitir la funcionalidad "recordarme". De lo contrario, volverá a iniciar sesión la próxima vez que visite el sitio. – 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:/"; 
     } 

    } 

Utilice por encima de código para implementar el filtro de cierre de sesión

+0

cómo se redireccionará a la página de inicio de sesión cuando la sesión expire. ¿Puedes por favor proporcionar el otro escenario? –

Cuestiones relacionadas