首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制每个用户只进行一个会话,并阻止随后的登录尝试?

如何限制每个用户只进行一个会话,并阻止随后的登录尝试?
EN

Stack Overflow用户
提问于 2012-10-20 06:24:23
回答 1查看 25.8K关注 0票数 4

并发控制的默认行为是将原始会话过期。但是,我想阻止第二个用户使用相同的凭据登录,显示消息“用户已经登录”。我怎样才能做到这一点?

下面是Spring-security.xml的配置:

代码语言:javascript
复制
<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>

(更新)我的最后一次春季安全配置:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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属性。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12985862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档