在春季安全中注销特定会话ID
Posted
技术标签:
【中文标题】在春季安全中注销特定会话ID【英文标题】:logout specific session Id in spring security 【发布时间】:2016-11-06 22:42:07 【问题描述】:在春季安全:
我认为使用两种方式注销:发生会话超时或用户注销本身时...
无论如何,以这些方式,在HttpSessionEventPublisher
和SessionRegistry
中调用destroySession,从sessionIds 列表中删除SessionInformation
...
当我使用以下方法强制注销特定用户时,此方法只是在 SessionRegistry
中“过期”SessionInformation
。现在,当我从SessionRegistry
获取所有在线用户“getAllPrincipals()”时,会话过期的用户在列表中!
@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;
如何从“Web 服务器”和“会话注册表”中注销会话对象的“特定用户”或“会话 ID”?
我在谷歌上搜索并在 Servlet API 中找到了HttpSessionContext
,它可以从特定的 sessionId 获取 HttpSession。然后使会话无效。但我认为这种方法并不完全有用!
(注意。这个类已被弃用!)
什么是最好的方法?是不是我错了?
【问题讨论】:
sessionRegistry.getSessionInformation(sessionId).expireNow(); Spring 会将这个会话标记为过期。此会话的任何进一步请求都将调用注销。 这是真的,但是如果用户不发送任何请求并且会话超时最大超过 1 小时(超时不触发),那么,当使用getAllPrincipals()
时,此方法返回所有原则包括在线会话和过期会话...这是我的问题...!
【参考方案1】:
试试这样:
@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
【讨论】:
感谢您的响应...我想强制注销一个用户和另一个用户,然后立即从SessionRegistry
和我的 Web 服务器中删除用户的会话对象..我认为这种方法会自行注销用户。 !
您知道我该怎么做吗?我想管理在线用户,强制注销后一个用户看到在线用户。当我使用 getAllPrincipals()
时,过期会话在列表中......!
我看到link.. 感谢您的尝试...我必须同时使用session.expireNow();
和sessionRegistry.removeSessionInformation(info.getSessionId());
.. 但是在客户端发送请求或触发超时之前会话不会从Web 服务器中删除。 ..!
欢迎 :p .. 如果您的问题得到解决,您可以接受它作为有效答案
如果我忽略 Web 服务器问题,这个答案是有效的:D...无论如何感谢您的帮助...也许我无法从 Web 服务器中删除会话...我不知道..! 以上是关于在春季安全中注销特定会话ID的主要内容,如果未能解决你的问题,请参考以下文章