并发控制的默认行为是将原始会话过期。但是,我想阻止第二个用户使用相同的凭据登录,显示消息“用户已经登录”。我怎样才能做到这一点?
下面是Spring-security.xml的配置:
<http auto-config="false" use-expressions="true">
<intercept-url pattern="/login*" access="permitAll"
requires-channel="https" />
<intercept-url pattern="/userHasLoggedIn" access="permitAll"
requires-channel="https" />
<intercept-url pattern="/j_spring_security_*" access="permitAll"
requires-channel="https" />
<intercept-url pattern="/session*" access="permitAll"
requires-channel="https" />
<form-login login-page="/login" authentication-failure-url="/loginFailed" />
<intercept-url pattern="/**" access="isAuthenticated()"
requires-channel="https" />
<session-management invalid-session-url="/sessionExpired" session-authentication-error-url="/loginAlready">
<concurrency-control error-if-maximum-exceeded="false" expired-url="/userHasLoggedIn" max-sessions="1"/>
</session-management>
<logout delete-cookies="JSESSIONID" />
</http>(更新)我的最后一次春季安全配置:
<http auto-config="false" use-expressions="true">
<intercept-url pattern="/login*" access="permitAll"
requires-channel="https" />
<form-login default-target-url="/home" login-page="/login" authentication-failure-url="/loginFailed" />
<intercept-url pattern="/**" access="isFullyAuthenticated()"
requires-channel="https" />
<session-management session-authentication-error-url="/loginFailed">
<concurrency-control expired-url="/loginFailed" error-if-maximum-exceeded="true" max-sessions="1"/>
</session-management>
<logout delete-cookies="JSESSIONID" />
</http>发布于 2012-10-20 08:40:57
解决方案是in the documentation
通常,您更希望防止第二次登录,在这种情况下,您可以使用 ..。 然后第二次登录将被拒绝。“拒绝”的意思是,如果使用基于表单的登录,用户将被发送到
authentication-failure-url。如果第二次身份验证是通过另一种非交互机制进行的,如“记住-我”,则将向客户端发送“未经授权”(402)错误。如果要使用错误页,则可以将属性session-authentication-error-url添加到session-management元素中。
因此,基本上将error-if-maximum-exceeded设置为"true",并从<concurrency-control>中删除expired-url属性。
https://stackoverflow.com/questions/12985862
复制相似问题