2011-06-07 27 views
7

Estoy utilizando el método de cierre de sesión en la aplicación web como a continuación, pero si marque remember me, el cierre de sesión no funciona, porque la cookie no se borra. ¿Cómo limpiar programáticamente esta cookie en mi método (o cómo hacer un mejor método de cierre de sesión)?Spring Security: ¿Cómo borrar la cookie `remember me` programáticamente?

public void logout() { 
    AnonymousAuthenticationToken anonymous = new AnonymousAuthenticationToken("anonymous", "anonymous", new ArrayList(Arrays.asList(new GrantedAuthorityImpl("ROLE_ANONYMOUS")))); 
    SecurityContextHolder.getContext().setAuthentication(anonymous); 
} 

Respuesta

5

Si está utilizando el nombre de la cookie de seguridad muelle estándar (que es SPRING_SECURITY_REMEMBER_ME_COOKIE), usted puede hacer esto:

void cancelCookie(HttpServletRequest request, HttpServletResponse response) 
{ 
    String cookieName = "SPRING_SECURITY_REMEMBER_ME_COOKIE"; 
    Cookie cookie = new Cookie(cookieName, null); 
    cookie.setMaxAge(0); 
    cookie.setPath(StringUtils.hasLength(request.getContextPath()) ? request.getContextPath() : "/"); 
    response.addCookie(cookie); 
} 

Vas a tener que cambiar el valor cookieName si está utilizando una costumbre nombre de la cookie

+0

¿Cómo obtener solicitud y respuesta? Nada en primavera para aclarar eso? – marioosh

+0

Solo páselos a su controlador: 'public void logout (solicitud de HttpServletRequest, respuesta de HttpServletResponse) {'. Spring MVC los pasará automáticamente. – Femi

2

La clase AbstractRememberMeServices tiene una implementación de LogoutHandler.logout que cancela la cookie. Inyecte el LogoutHandler y llame a este método.

+0

@Femi Este código no funciona para mí –

Cuestiones relacionadas