我们在应用程序中使用Grails Spring Security来执行用户身份验证。如果用户登录我们的应用程序,将保存rememberMe cookie。这意味着,用户将在浏览器会话之间保持忠诚。
如何查看当前在线的用户?我读过您可以使用SessionRegistryImpl
或HttpSessionListener
从会话中检索此信息,但我不知道如何实现它。我找到了这篇文章,但我不知道如何将其转换为Grails:Online users with Spring Security
有什么想法吗?
答案 0 :(得分:1)
我构建了一个依赖于在线用户的约会应用程序。我创建了一个跟踪在线用户的Grails服务。您所要做的就是创建一个保持并发哈希映射的服务,该服务是单例,因此整个Web应用程序只有一个实例。当您的用户第一次登录时,您可以在哈希映射中设置用户ID和未来时间。例如:
Key = UserID 值=现在+ 30分钟
因此,当用户登录时,您将使用30分钟增加登录时间并插入哈希映射。对于用户发送的每个请求,您可以通过使用其用户ID查找其到期时间来更新哈希映射的值。所以现在如果用户关闭浏览器,他将不会更新到期日,并且他的在线状态将无效。您可以拥有一个每30分钟运行一次的作业,并删除那些有效期限小于NOW的密钥。或者,如果您想计算在线用户,只需遍历地图并计算其到期日期大于现在的条目。
它是内存中的哈希映射,非常容易访问和操作,并且速度很快。这对我很有用,因为我使用并发哈希映射,更新和读取是安全的。希望这可以帮助您获得您想要的东西。对不起,我的答案很晚,但我刚看到这个问题:)