我正在使用 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/