java - 如何迭代并从 session 中获取所有用户名

标签 java jsp servlets

我正在使用 tomcat 服务器。 当应用程序必须由多个用户访问时。所有用户详细信息仅存储在 session 中。 在某些情况下,我必须获取所有用户的详细信息。 如何迭代并获取该 session 中的所有用户详细信息。

最佳答案

然后只需收集并存储应用程序范围内的所有登录信息即可。最简单的方法是让 User代表登录用户实现的对象 HttpSessionBindingListener 。您只需要准备一个Set<User>在应用程序范围内(作为 ServletContext 属性)。

public class User implements HttpSessionBindingListener {

    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
        logins.add(this);
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
        logins.remove(this);
    }

    // Don't forget to override equals() and hashCode() as well.
}

这样,每当您登录用户时,如下所示

User user = userService.find(username, password);

if (user != null) {
    request.getSession().setAttribute("user", user);
    // ...
}

然后是valueBound()将被调用。每当您通过删除属性或使 session 无效或让 session 过期来注销用户时,valueUnbound()将被调用。

ServletContext属性当然只在所有 servlet 和 JSP 中可用。

关于java - 如何迭代并从 session 中获取所有用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7665902/

相关文章:

java - 在一个请求中多次上传到 servlet

java - 从 jsp 向 servlet 传递值,但 servlet 不可用

servlets - Struts 2 中的 SessionAware 设计

java - 如何以编程方式触发 EMF 模型的验证?

java - Android:如何在多个仍在运行的 Activity 之间直接交换数据?

java - jsoup 解析而不验证

javascript - 在 jsp 困境中保留 HTML 选择选项

java - 如何使用 JDBC 驱动程序 0.13.0 在 Hive 中设置 FetchSize

java - "type"在jsp中使用ejb时无法解析为类型

java.lang.ClassNotFoundException : javax. servlet.jsp.jSTL.sql.SQLExecutionTag