会话管理使用Spring的安全性:并发会话(Session Management using Spr

2019-08-03 00:08发布

我已经开发使用弹簧安全的Web应用程序。 对于登录它从LDAP访问。 现在,我要管理使用弹簧安全本身的会议上,我可以通过看authentication.getName()我得到了username ,我也可以得到sessionID

现在,我要确保如果同一用户尝试使用一些其他的浏览器,他应该得到一个消息,说他已经在他的帐号登录来自同一系统登录。

谁能给一个想法如何做到这一点????

<security:session-management 
        invalid-session-url="/login.jsp?error=sessionExpired"
        session-authentication-error-url="/login.jsp?error=alreadyLogin">
    <security:concurrency-control 
               max-sessions="1" 
               expired-url="/login.jsp?error=sessionExpiredDuplicateLogin"
               error-if-maximum-exceeded="false" />
</security:session-management>

当我使用这一点,并尝试登录使用一些其他的浏览器,它使我有以下错误:

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
enter code here

Answer 1:

我可能失去了一些东西,但我试了下配置,并将其按预期工作:

<!-- more configuration stuff -->

<sec:form-login login-page="/login.jsp"
    default-target-url="/defaultTarget.jsp"
    authentication-failure-url="/login.jsp?error=true"
    login-processing-url="/login" always-use-default-target="true" />

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

当我尝试使用其他浏览器相同的用户登录,它需要我/login.jsp并显示错误消息: Maximum sessions of 1 for this principal exceeded

编辑:你也需要把这个在你web.xml

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>


文章来源: Session Management using Spring Security: Concurrent sessions