2011-06-07 24 views
7

Aşağıdaki gibi web uygulamasında çıkış yöntemini kullanıyorum, ancak remember me çıkışını kontrol edersem, çerez temizlenmediğinden, çıkış çalışmıyor. Metodumda bu çerezi program aracılığıyla nasıl temizlerim (veya daha iyi bir çıkış yöntemi nasıl yapılır)? Eğer (SPRING_SECURITY_REMEMBER_ME_COOKIE olan) standart Bahar Güvenlik çerez adını kullanıyorsanızYay Güvenliği: 'Beni hatırla' programlı olarak nasıl temizlenir?

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

cevap

5

, bunu yapabilirsiniz:

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

Sen cookieName değerini değiştirmek gerekecek Eğer özel bir kullanıyorsanız çerez adı.

+0

Nasıl istek ve yanıt verilir? Bunu temizlemek için Bahar'da bir şey yok mu? – marioosh

+0

Sadece onları denetleyicinize iletin: 'public void logout (HttpServletRequest isteği, HttpServletResponse response) {'. Bahar MVC bunları otomatik olarak iletecektir. – Femi

2

AbstractRememberMeServices sınıfında, çerezi iptal eden LogoutHandler.logout uygulaması vardır. LogoutHandler'u enjekte edin ve bu yöntemi çağırın.

+0

@Femi Bu kod benim için çalışmıyor –

İlgili konular