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

发布于 2024-12-08 14:55:11 字数 100 浏览 0 评论 0原文

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

I am using tomcat server.
When the application has to access by multiple users. all user details are stored in session only.
In some situation I have to get all user's detail.
How can iterate and get all users detail from that session.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦情居士 2024-12-15 14:55:11

然后,只需收集并存储应用程序范围内的所有登录信息即可。最简单的方法是让代表登录用户的User对象实现HttpSessionBindingListener。您只需在应用程序范围内准备一个 Set(作为 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 中可用。

Just collect and store all logins in the application scope then. Easiest would be to let the User object which represents the logged-in user implement HttpSessionBindingListener. You only need to prepare a Set<User> in the application scope (as a ServletContext attribute).

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.
}

This way, whenever you login the user as follows

User user = userService.find(username, password);

if (user != null) {
    request.getSession().setAttribute("user", user);
    // ...
}

then the valueBound() will be called. Whenever you logout the user by removing the attribute or invalidating the session or let the session expire, then valueUnbound() will be called.

The ServletContext attribute is of course just available in all servlets and JSPs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文