gpt4 book ai didi

spring - 如何使用 Spring Security 通知用户另一个 session ?

转载 作者:行者123 更新时间:2023-12-02 17:50:46 26 4
gpt4 key购买 nike

我有一个设计/系统要求,要通知用户User-A,在之前有另一个事件 session (由User-B)用户A的登录。如何使用 Spring Security 来完成此任务?

场景是这样的:

  1. John Doe 使用用户名 johndoe 登录系统
  2. Jane 使用 johndoe 登录系统
  3. 系统应向两个用户显示一条通知(包括其他用户的 IP 地址),表明已使用其用户名创建了另一个 session 。

示例:

Jane第 2 步 中登录后,John Doe 在提出新请求(例如单击链接)时,将收到ff。通知:

You have been automatically logged-out of the system.
Your login credential was used with IP Address (x.x.x.x).
If you believe your account was compromised, please report...

同时,Jane 登录后,她也会收到通知,在她登录之前还有另一个事件 session 。

Your login credential was used with IP Address (x.x.x.x).
If you believe your account was compromised, please report...

我尝试研究自定义 session 管理过滤器、自定义并发 session 过滤器和自定义并发控制策略,但我无法理解这个主题。我似乎无法识别我应该定制的 w/c 项目。

我还阅读了 Session Management Spring Security 文档的一章,但我卡在如何实现上述要求上。

最佳答案

如果我收到您的问题,您一次只需要一名用户使用 xyz 凭据登录,如果其他用户 (A) 在一名用户 (B) 已经登录时尝试登录,则您不需要希望其他用户 A 登录并提示有人使用相同的凭据登录。

您可以通过max-sessions="1"来实现这一点

<security:http auto-config="true" use-expressions="true" access-denied-page="/accessDenied.jsp">

<security:form-login login-page="/index.jsp"
default-target-url="/jsp/home.jsp"
authentication-failure-handler-ref="authenticationFailureHandler"/>


<security:session-management>
<security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true"/>
</security:session-management>

</security:http>

在某些地方,我对理解您的实际需求感到困惑,如果您需要两个 session 都应保持事件状态,则增加 max-sessions="max_session_you_need"并仅注册 session 创建监听器,您可以在其中检查 session 请求的事件 session 来了,如果它与事件 session 之一匹配,那么某个用户已经登录并执行您想做的任何操作...

关于spring - 如何使用 Spring Security 通知用户另一个 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18093995/

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