【问题标题】:Programmatic invalidation of HttpSessionHttpSession 的编程失效
【发布时间】:2012-08-29 09:06:02
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: servlets spring-security tomcat7 httpsession


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      基本上有两种方式(不考虑 Spring Security,因为我不使用 Spring):

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

        sessions.get(user).invalidate();
        

        HttpSessionListener 和/或HttpSessionBindingListener 可能有助于在会话超时/到期的情况下清理应用程序范围内的Map

      2. 在数据库中添加一个布尔列,每个filter 的请求都会检查该列。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-06
        • 2015-10-30
        • 2019-02-22
        • 1970-01-01
        • 1970-01-01
        • 2012-08-12
        • 2014-02-01
        • 2014-05-02
        相关资源
        最近更新 更多