2011-06-07 67 views
7

我在web-app中使用下面的註銷方法,但是如果我檢查remember me註銷不起作用,因爲cookie未被清除。如何在我的方法中以編程方式清除此cookie(或如何製作更好的註銷方法)?如果您使用的是自定義的Spring Security:如何以編程方式清除「記住我」cookie?

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

你必須改變cookieName值:

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

回答

5

如果您使用的是標準的Spring Security cookie的名稱(這是SPRING_SECURITY_REMEMBER_ME_COOKIE),你可以這樣做cookie名稱。

+0

如何獲取請求和響應?春天什麼都不能清除那個? – marioosh 2011-06-07 13:21:18

+0

只需將它們傳遞到您的控制器:'公共無效註銷(HttpServletRequest請求,HttpServletResponse響應){'。 Spring MVC會自動將它們傳入。 – Femi 2011-06-07 13:31:26

2

AbstractRememberMeServices類的實現LogoutHandler.logout取消cookie。注入LogoutHandler並調用此方法。

+0

@Femi此代碼不適用於我 – 2017-03-22 14:25:10

相關問題