如何在 Grails 中使用 Spring Security 检查用户在线状态?
Posted
技术标签:
【中文标题】如何在 Grails 中使用 Spring Security 检查用户在线状态?【英文标题】:How to check User Online Status with Spring Security in Grails? 【发布时间】:2013-05-14 02:47:24 【问题描述】:我们在应用程序中使用 Grails Spring Security 来执行用户身份验证。如果用户登录到我们的应用程序,rememberMe cookie 将被保存。这意味着,用户将在浏览器会话之间保持登录状态。
如何查看当前在线的用户?我读到您可以使用SessionRegistryImpl
或HttpSessionListener
从会话中检索此信息,但我不知道如何实现。我找到了这篇文章,但我不确定如何将其转换为 Grails:Online users with Spring Security
有什么想法吗?
【问题讨论】:
grails install-templates
会给你你的 web.xml 来编辑。这正是他们正在做的事情。
@JamesKleeh 我设法让它与这篇文章一起工作***.com/questions/6648100/… 问题是当用户登录并关闭浏览器时。会话保持打开状态。那么在这种情况下该怎么办?
【参考方案1】:
我构建了一个依赖在线用户的约会应用程序。我创建了一个跟踪在线用户的 Grails 服务。您所要做的就是创建一个保持并发哈希映射的服务,该服务是单例的,因此整个 Web 应用程序只有一个实例。当您的用户第一次登录时,您会在哈希图中设置用户 ID 和未来时间。例如:
密钥 = 用户 ID 价值 = 现在 + 30 分钟
因此,当用户登录时,您将他的登录时间增加 30 分钟并插入哈希映射。对于用户发送的每个请求,您通过使用他的用户 ID 查找他的到期时间来更新哈希映射的值。所以现在如果用户关闭浏览器,他不会更新过期时间,他的在线状态将是无效的。您可以有一个每 30 分钟运行一次的作业,并删除那些过期日期小于 NOW 的密钥。或者如果你想计算在线用户,只需遍历地图并计算其过期日期大于 NOW 的条目。
它是内存中的哈希映射,非常容易访问和操作,而且速度很快。这对我很有用,而且由于我使用的是并发哈希映射,因此更新和读取是安全的。希望这可以帮助你得到你想要的。对不起,我的回答迟了,但我才看到这个问题:)
【讨论】:
以上是关于如何在 Grails 中使用 Spring Security 检查用户在线状态?的主要内容,如果未能解决你的问题,请参考以下文章
Grails 使用 spring-security-core-3.0.6+ 重定向注销后
使用 Spring Security 时如何允许 CKEditor 在 Grails 中上传图像
如何在 grails 和现有 oauth2 提供程序中使用 Spring Security 实现基于表单的登录