【问题标题】:Access all User Session in Struts 2访问 Struts 2 中的所有用户会话
【发布时间】:2012-04-12 17:22:04
【问题描述】:

我正在使用 JPA 构建一个 struts 2 应用程序。用户可以多次登录应用程序。我想要

  1. 用户能够在网格中查看他的所有会话,并可能突出显示当前会话,并且用户可以选择一个会话并终止它。
  2. 管理员还应该能够查看所有登录用户,还可以查看每个登录用户的所有会话,还可以选择终止任何会话。

谢谢

【问题讨论】:

    标签: java jsp jakarta-ee struts2


    【解决方案1】:

    我认为HttpSessionBindingListener 是您要找的。 我不会写完整的代码,只是建议你一种方法:

    您可以将静态字段(映射)添加到您的User class (DTO),您将在其中存储所有活动的sessions of users。 :

    例如private static Map<User, HttpSession> usersSessions= new HashMap<User, HttpSession>();

    然后让User class 实现HttpSessionBindingListener。通过这种方式,您可以指定 valueBound(HttpSessionBindingEvent event) 方法,您可以在其中获取实际创建的 session 并将其放入您的 usersSessions 中,如下所示:

    usersSessions.put(this, event.getSession());

    然后在valueUnbound(HttpSessionBindingEvent event)方法中:

    usersSessions.remove(this);logout 之后删除users session

    这样您就拥有了所有active sessions 中的Map 以及它属于哪个用户的信息。 IMO,您可以通过此轻松找出您的其他问题。

    【讨论】:

    • 使用 ThreadLocal 对象或模式来监控用户会话是否有意义。无论如何感谢您的回答。让我试试看。
    • 我不这么认为。您必须将会话存储在对所有用户可见的静态字段中,因为您希望有可能使来自管理员帐户的会话无效。如果没有这个静态字段,这将是不可能的,因为您无法从一个会话访问另一个会话 - 所以您也不能使其无效。但是通过这种方式,您可以从该静态字段中获取实际用户会话,并轻松使所需的会话无效。
    猜你喜欢
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 2011-03-05
    • 2014-01-23
    • 2012-02-13
    • 1970-01-01
    相关资源
    最近更新 更多