如何迭代并从会话中获取所有用户名

时间:2011-10-05 18:28:22

标签: java jsp servlets

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

1 个答案:

答案 0 :(得分:4)

然后收集并存储应用程序范围内的所有登录信息。最简单的方法是让代表登录用户的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()。每当您通过删除属性或使会话无效或让会话过期而注销用户时,都会调用valueUnbound()

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