Cookies 如何使用基于Spring Security持久令牌的Memberme服务以编程方式注销

Cookies 如何使用基于Spring Security持久令牌的Memberme服务以编程方式注销,cookies,spring-security,remember-me,Cookies,Spring Security,Remember Me,我在我的项目中使用SpringDataREST和SpringSecurity。我正在使用SpringSecurity的基于持久令牌的RememberMe服务来记住登录的用户,我正在尝试以编程方式使会话无效,并从存储库和cookie中删除请求的数据。我已经尝试了下面的代码,但只针对该请求工作,并且如果引发了另一个请求,它将再次获得身份验证。如何在会话无效后从数据库和浏览器中删除cookie Authentication auth = SecurityContextHolder.getContext

我在我的项目中使用SpringDataREST和SpringSecurity。我正在使用SpringSecurity的基于持久令牌的RememberMe服务来记住登录的用户,我正在尝试以编程方式使会话无效,并从存储库和cookie中删除请求的数据。我已经尝试了下面的代码,但只针对该请求工作,并且如果引发了另一个请求,它将再次获得身份验证。如何在会话无效后从数据库和浏览器中删除cookie

Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null){    
    new SecurityContextLogoutHandler().logout(request, response, auth);
    new PersistentTokenBasedRememberMeServices().logout(request, response, auth);
}
SecurityContextHolder.getContext().setAuthentication(null);

是否可以使使用spring security的PersistentTokenBasedMemberMe服务的会话无效并删除?删除cookie或其他需要使用的额外功能?

您需要依赖注入MemberMemberServices。这应该起作用:

def rememberMeServices

def yourAction(){

    SecurityContextHolder.clearContext(); //invalidates auth
    rememberMeServices.logout(request, response, null) // removes rememberMe cookie

}