我有一个设计/系统要求,要求用户User-A
在User-B
登录之前通知另一个活动会话(User-A
)。你如何使用Spring Security实现这一目标?
情景如下:
示例:
Jane 登录Step-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 的登录时,她也会收到通知,告知她在登录前还有其他活动会话。
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文档的Session Management章节,但我仍然坚持如何实现上述要求。
答案 0 :(得分: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”并注册会话创建监听器,你可以在那里检查关于会话请求的活动会话来了,如果它与一个活动会话匹配,那么一些用户已经登录并做任何你想做的事情......