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