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