HttpSession的程序化失效

时间:2012-09-04 16:50:18

标签: servlets spring-security tomcat7 httpsession

是否可以终止登录用户的HttpSession?

我们可以在用户会话中执行以下操作:

HttpSession s = request.getSession(false);
s.invalidate(); // make sure s != null

但是管理员用户如何“踢出”给定用户?

我希望在ServletContext下找到一些API,它会返回一个活动会话列表,但似乎并非如此。

我正在使用Spring Security 3& Tomcat 7。

2 个答案:

答案 0 :(得分:3)

基本上有两种方式(由于我不做Spring,因此不考虑Spring Security):

  1. 在某个应用范围Map<User, HttpSession>收集所有这些会话。然后就做

    sessions.get(user).invalidate();
    

    如果会话超时/到期,HttpSessionListener和/或HttpSessionBindingListener可能有助于清理应用程序范围Map

  2. 向数据库添加一个布尔列,每个filter请求检查一次。

    if (shouldLogout(user)) {
        session.invalidate();
    }
    

答案 1 :(得分:3)

Spring Security有一个SessionRegistry来处理这种情况。您可以使用session-registry-ref标记中的concurrency-control属性对其进行声明。这里有一点documentation