gpt4 book ai didi

java - Spring:如何动态设置最大并发 session 数

转载 作者:行者123 更新时间:2023-11-30 10:51:35 26 4
gpt4 key购买 nike

假设我的应用有多种帐户类型,每种类型都有自己允许的最大并发 session 数。例如,如果最大值为 1,那么当用户在其台式电脑上登录时尝试从笔记本电脑登录时,他应该会收到错误消息。
我如何使用 Spring 实现这一点?我知道 concurrency-control 但据我所知它允许“静态”设置整个上下文的限制。
我在考虑 SpEL 但没有想出任何办法。

附言
我还想知道当用户超过限制时是否会抛出一个特定的异常,以便我可以处理它并显示页面以解释他无法登录的原因。

UPD
感谢@Nándor 的聪明想法:当用户尝试在另一台设备上登录时,应该要求他在当前设备或另一台设备上注销。

UPD2
我发现有一个 SessionRegistry 类的 bean|它包含所有必需的信息,还允许手动使 session 过期。我也可以用它控制 session 的数量。
但是仍然存在问题:如何通知另一台设备 session 已关闭?当我使用 SessionInformation.expireNow() 手动使 session 过期时,它会给我一个包含以下文本的页面:

This session has been expired (possibly due to multiple concurrent logins being attempted as the same user).

文本的意思正是我想要的,但我想按我的意愿处理它。我在 java.lang.Exception 上尝试了 @ExceptionHandler 但它没有捕捉到任何东西。

提前致谢!

最佳答案

谢谢 @Nándor思来想去,终于找到了解决办法。

关于管理 Activity session 的数量:

我使用 SessionRegistry bean,它可以管理所有主体的 Activity session 。此外,我认为值得一提的是,在我将安全配置从 servlet config 取消到 applicationContext.xml 之前,SessionRegistry 似乎是空的。 Spring 记录它已成功将 session ID 放入注册表,但它仍然是空的,除非它在 ​​applicationContext.xml 中声明。

关于处理 session 过期:

concurrency-control 标签有 expire-url 标签,其中包含在 session 过期时用户将被重定向到的 url。我可以将 Controller 映射到它并做我想做的事。

关于java - Spring:如何动态设置最大并发 session 数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34667857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com