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

问题描述:

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

然后只收集并存储应用程序范围内的所有登录。最简单的方法是让代表登录用户的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。