5

春のセキュリティを使用して Web アプリケーションを開発しました。ログインの場合、LDAP からアクセスできます。ここで、Spring Security 自体を使用してセッションを管理したいと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
4

1 に答える 1

6

何か不足している可能性がありますが、次の構成を試してみましたが、期待どおりに動作します。

<!-- 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>
于 2013-02-28T17:24:15.813 に答える