在春季安全:
我想用两种方式注销:当发生会话超时或用户注销时......
无论如何,以HttpSessionEventPublisher
和SessionRegistry
从sessionIds列表中删除SessionInformation
来调用destroySession ...
当我使用以下方法强制注销特定用户时,此方法仅仅已过期" SessionInformation
中的SessionRegistry
。现在,当我得到所有在线用户" getAllPrincipals()"来自SessionRegistry
的会话已过期的用户位于列表中!
@Override
public boolean forceLogOut(int userId){
for (Object username: sessionRegistry.getAllPrincipals()) {
User temp = (User) username;
if(temp.getId().equals(userId)){
for (SessionInformation session : sessionRegistry.getAllSessions(username, false)) {
session.expireNow();
}
}
}
return true;
}
如何退出特定用户'或者' sessionId'该会话对象从" Web服务器"和#34;会话注册表" ?
我在google搜索并在Servlet API中找到HttpSessionContext
,可以从特定的sessionId获取HttpSession。然后使会话无效。但我认为这种方法并不完全有用!
(注意:这个类已被弃用!)
最好的方法是什么?我是不是错了?
答案 0 :(得分:0)
试试这样:
@RequestMapping(value="/logout", method = RequestMethod.GET)
public String logoutPage (HttpServletRequest request, HttpServletResponse response){
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null){
//new SecurityContextLogoutHandler().logout(request, response, auth);
persistentTokenBasedRememberMeServices.logout(request, response, auth);
SecurityContextHolder.getContext().setAuthentication(null);
}
return "redirect:/login?logout";
}
要注销特定会话ID,请检查该链接: how to log a user out programmatically using spring security