java - 我如何检查哪些所有用户都登录到我的应用程序

标签 java session servlets jakarta-ee

我有一个基于 Web 的应用程序,它使用用户名和密码进行登录。

现在我如何检查所有用户在那个时间登录的特定时间。 我正在使用 session 管理,应用程序中没有使用数据库,一切都在文件系统上

编辑:还有 1 个愚蠢的疑问.. 如何定义具有应用程序范围的变量.. 是这样的吗?

<env-entry>
<env-entry-name>test/MyEnv2</env-entry-name>
<env-entry-type>java.lang.Boolean</env-entry-type>
<env-entry-value>true</env-entry-value>
</env-entry>

最佳答案

只需将应用程序范围内的所有登录用户收集到一个Set 中即可。如果您的应用程序设计良好,您应该有一个代表登录用户的 javabean User。让它执行 HttpSessionBindingListener并在 Set 即将在 session 中绑定(bind)/解除绑定(bind)时添加/删除用户。

启动示例:

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);
    }

    // @Override equals() and hashCode() as well!

}

请注意,您需要在应用程序范围内准备Set,以便它不会在上述方法中返回null。您可以通过 nullcheck 或在 ServletContextListener#contextInitialized() 的帮助下以相同的方法执行此操作.

然后,在您的应用程序中您可以访问 ServletContext 的任何地方,就像在 servlet 中一样,您可以按如下方式访问登录用户:

Set<User> logins = (Set<User>) getServletContext().getAttribute("logins");

关于java - 我如何检查哪些所有用户都登录到我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4592961/

相关文章:

java - 使用 Eclipse 的 Weblogic 连接池

java - 如何获取字符 ArrayList 并将 ArrayList 中的所有这些元素返回到字符串中

java - C# 和 Java 中的 AES 加密文件

java - Internet Explorer 和 JSP 中的基本 URL

java - 在java中使用ZipOutputStream创建ODT文件时无法在OpenOffice中打开

php - 购物车系统与数据库的连接

javascript - 通过 session 存储获取所有表行值

asp.net - NHibernate:获取所有打开的 session

java - 有没有办法让java中的所有servlet类共享单个变量

java - 使用 onActityResult 传递 ArrayList<String>