如何迭代并获取会话中的所有用户名
问题描述:
我正在使用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。