4

同時実行制御のデフォルトの動作は、元のセッションを期限切れにすることです。ただし、「ユーザーは既にログインしています」というメッセージを表示して、同じ資格情報でログインしている2番目のユーザーをブロックしたいと思います。どうすればこれを達成できますか?

以下は、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>
4

1 に答える 1

11

解決策はドキュメントにあります

2 回目のログインを防止したい場合がよくあります。

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

2 回目のログインは拒否されます。「拒否」とはauthentication-failure-url、フォームベースのログインが使用されている場合、ユーザーが に送信されることを意味します。2 番目の認証が「remember-me」などの別の非対話型メカニズムを介して行われた場合、「unauthorized」(402) エラーがクライアントに送信されます。代わりにエラー ページを使用する場合は、要素に属性session-authentication-error-urlを 追加できます。session-management

したがって、基本的に に設定error-if-maximum-exceededし、属性"true"を削除します。expired-url<concurrency-control>

于 2012-10-20T08:40:57.700 に答える