如何检查所有用户登录到我的应用程序
我有一个基于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。这将使应用程序服务器膨胀,并且如果您的应用程序也支持分布式环境将来需要运行多个盒子。