是否可以终止登录用户的 HttpSession?
我们可以在用户的会话中执行以下操作:
HttpSession s = request.getSession(false);
s.invalidate(); // make sure s != null
但是,管理员用户如何"踢出"给定用户?
我希望在ServletContext
下找到一些 API,它会返回活动会话列表,但事实似乎并非如此。
我正在使用Spring Security 3和Tomcat 7。
Spring Security有一个SessionRegistry来处理这种情况。您可以使用concurrency-control
标记中的session-registry-ref
属性声明它。这里有一些文档。
基本上有两种方法(将 Spring 安全性排除在考虑之外,因为我不做 Spring(:
-
在某些应用程序范围的
Map<User, HttpSession>
中收集所有这些会话。然后就做sessions.get(user).invalidate();
HttpSessionListener
和/或HttpSessionBindingListener
可能有助于在会话超时/过期的情况下清理应用程序范围Map
。 -
向数据库添加一个布尔列,该列在每个请求上由某个过滤器检查。
if (shouldLogout(user)) { session.invalidate(); }