我在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);
}
答案 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
并调用此方法。