如何在 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 将被保存。这意味着,用户将在浏览器会话之间保持登录状态。

如何查看当前在线的用户?我读到您可以使用SessionRegistryImplHttpSessionListener 从会话中检索此信息,但我不知道如何实现。我找到了这篇文章,但我不确定如何将其转换为 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 gsp 中调用标签不起作用

Grails 使用 spring-security-core-3.0.6+ 重定向注销后

使用 Spring Security 时如何允许 CKEditor 在 Grails 中上传图像

如何在 grails 和现有 oauth2 提供程序中使用 Spring Security 实现基于表单的登录

如何在 Grails 中使用 spring security rest 插件进行身份验证

如何在 Grails 中使用 Spring Security 检查用户在线状态?