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