Spring Security:如何以编程方式清除`remember me` cookie?

时间:2011-06-07 12:56:58

标签: spring spring-security

我在web-app中使用logout方法,如下所示,但如果我检查remember me注销不起作用,因为cookie未被清除。如何在我的方法中以编程方式清除此cookie(或如何更好地注销方法)?

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

2 个答案:

答案 0 :(得分:5)

如果您使用的是标准Spring Security cookie名称(SPRING_SECURITY_REMEMBER_ME_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);
}

如果您使用自定义Cookie名称,则必须更改cookieName值。

答案 1 :(得分:2)

AbstractRememberMeServices类的实现为LogoutHandler.logout,取消了cookie。注入LogoutHandler并调用此方法。