【发布时间】:2014-09-13 17:36:51
【问题描述】:
这是否可以在 Tomcat 中以编程方式终止其他用户的 HTTP 会话?我的用例是这样的:网站上有一些用户,还有一个管理员。当管理员删除特定用户时,如果他有活动会话,我希望他立即注销。可以从应用程序代码访问用户的会话吗?
【问题讨论】:
标签: java http session tomcat jakarta-ee
这是否可以在 Tomcat 中以编程方式终止其他用户的 HTTP 会话?我的用例是这样的:网站上有一些用户,还有一个管理员。当管理员删除特定用户时,如果他有活动会话,我希望他立即注销。可以从应用程序代码访问用户的会话吗?
【问题讨论】:
标签: java http session tomcat jakarta-ee
您需要维护userId->HttpSession 的并发映射。当用户登录时,将其放入地图中。当会话为destroyed 时,将其从地图中移除。
现在给定一个 userId,您可以从地图中检索会话,然后 invalidate 它。
【讨论】:
是的,可以列出 Tomcat 中所有已登录或工作的用户会话,并将其终止到任何一个会话
(如果在安装时您选择了主机管理器,那么可以使用用户名和密码)
【讨论】:
我在其他问题的答案中找到了解决方案:
Tomcat: how to access (session) Manager from servlet
诀窍是使用反射从HttpSession 或ServletContext 获取Manager。对我有用的代码:
private Manager manager(HttpSession session) throws Exception {
Field facadeSessionField = StandardSessionFacade.class.getDeclaredField("session");
facadeSessionField.setAccessible(true);
StandardSession stdSession = (StandardSession) facadeSessionField.get(session);
return stdSession.getManager();
}
【讨论】: