3

我有一个设计/系统要求来通知用户,在登录之前User-A有另一个活动会话(通过)。您如何使用 Spring Security 完成此任务?User-BUser-A

场景是这样的:

  1. John Doe使用用户名johndoe登录系统
  2. Jane使用johndoe登录系统
  3. 系统应该向两个用户显示一个通知(包括另一个用户的 IP 地址),表明有另一个使用他或她的用户名创建的会话。

例子:

Jane登录后Step-2John 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登录后,还会通知她在登录之前还有另一个活动会话。

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

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

我还阅读了Spring Security 文档的会话管理一章,但我坚持如何实现上述要求。

4

1 回答 1

3

如果我收到您的问题,您一次只需要一个用户使用 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> 

在某个地方,我在理解您的实际需求时感到困惑,如果您需要两个会话都应该保持活动状态,则增加 max-sessions="max_session_you_need" 并注册会话创建侦听器,在那里您可以检查会话请求是否与活动会话有关,如果它与一个活动会话匹配,然后一些用户已经登录并做任何你想做的事情......

于 2013-08-07T04:22:09.117 回答