如何检查所有用户登录到我的应用程序

我有一个基于Web的应用程序,使用userName和密码登录。

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

编辑:1更傻的怀疑..如何用应用范围定义一个变量..这是什么类似的东西?

 test/MyEnv2 java.lang.Boolean true  

只需收集应用程序范围内Set中的所有登录用户。 如果您的应用程序设计得很好,那么您应该有一个表示登录User的javabean User 。 让它实现HttpSessionBindingListener并在会话中绑定/解除绑定时从Set添加/删除用户。

开球示例:

 public class User implements HttpSessionBindingListener { @Override public void valueBound(HttpSessionBindingEvent event) { Set logins = (Set) event.getSession().getServletContext().getAttribute("logins"); logins.add(this); } @Override public void valueUnbound(HttpSessionBindingEvent event) { Set logins = (Set) event.getSession().getServletContext().getAttribute("logins"); logins.remove(this); } // @Override equals() and hashCode() as well! } 

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

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

 Set logins = (Set) getServletContext().getAttribute("logins"); 

更新

BalusC的approch更合适,通过这种方法,您将获得没有登录用户的会话。 要做到这一点,你需要跟踪HttpSessionBindingListener。

您可以实现HttpSessionListener并可以跟踪已登录的用户

  public void sessionCreated(HttpSessionEvent se) { // adding logging in user to some application data map or inserting it to DB } public void sessionDestroyed(HttpSessionEvent se) { // remove logged in user to some application data map or inserting it to DB } 

更可扩展的解决方案是将“loggedIn”这样的列添加到数据库中的users表中,并在用户登录时将其设置为true。这将使应用程序服务器膨胀,并且如果您的应用程序也支持分布式环境将来需要运行多个盒子。