提醒用户会话被并发登录替换

Posted

技术标签:

【中文标题】提醒用户会话被并发登录替换【英文标题】:Alert user to session being replaced by concurrent login 【发布时间】:2011-05-31 19:32:42 【问题描述】:

我们有一个具有相当标准设置的 spring 安全应用程序。目前我们只允许每个主体 1 个会话,拒绝同一主体的其他登录,直到第一个会话注销或过期(maximumSessions=1,excpeptionIfMaximumExceeded=true)。

我想更改此设置,以便当主体以当前活动登录另一个会话第二次登录时,第一个会话无效/替换。使用提供的 Spring Security 并发会话控制策略可以轻松完成此操作,但我无法弄清楚如何提醒用户。当用户的会话被替换时,注销处理程序使会话无效。下一个请求将重定向到登录页面,并在查询字符串上显示错误代码。但是,如果获得此重定向的请求是图像或其他非编程调用,我将无法处理。

似乎我需要将用户置于中间状态,他们有一个会话,但它已过期,如果他们不想替换原来的会话,他们需要重新登录。但是,我没有看到这样做的好方法。

在某处有这样的设置示例吗?

【问题讨论】:

【参考方案1】:

您是否想过在 javascript 中制定一个轮询机制,以便在用户的会话即将失效时提醒用户?这样他们就会知道他们的会话无效,并且可能有机会刷新它,以防他们部分填写了表单或文本区域。

这也可以在登录端工作。如果他们有另一个会话处于活动状态,您可以在登录后添加一个步骤,并让他们验证他们想要使其无效。

似乎不需要中间步骤,因为通常身份验证应该是布尔值。它们要么经过身份验证,要么未经身份验证。中间区域可能更难处理所有情况。

【讨论】:

我们目前有一个因超时而过期的会话轮询机制,我们会对此进行调整。我们可以通过在登录时再执行一步来处理它,但我更感兴趣的是在 UI 端干净地处理被驱逐的会话。我同意安全性确实应该是布尔值,但我不希望会话“神奇地”返回如果无效会话上的最后一个请求被我们无法处理其返回状态的请求(即图像或脚本包含)捕获,则登录屏幕。

以上是关于提醒用户会话被并发登录替换的主要内容,如果未能解决你的问题,请参考以下文章

具有并发会话的 grails 3

java做单用户的多重并发会话数限制

spring mvc中的并发用户登录

firebase 登录用户是不是被视为并发用户?

检查会话是不是存在 JSF

每次使用 JWT 登录时允许一个并发用户