我在项目中使用Spring Data REST和Spring Security。 AM使用基于持久令牌的记住我的Spring安全服务来记住登录用户,我试图使会话无效并以编程方式从存储库和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);
是否可以使用弹簧安全性的PersistentTokenBasedRememberme服务使会话无效并删除?还有什么额外的东西要用来删除cookie吗?
答案 0 :(得分:2)
你需要依赖注入rememberMeServices。这应该有效:
def rememberMeServices
def yourAction(){
SecurityContextHolder.clearContext(); //invalidates auth
rememberMeServices.logout(request, response, null) // removes rememberMe cookie
}