2

Spring Security 3を使用していて、ApplicationContext-Security.xmlで指定されています

 <form-login login-page="/genesis" default-target-url="/diagnostics/start-diagnostics"
      authentication-failure-url="/genesis?authfailed=true"
      authentication-success-handler-ref="customTargetUrlResolver"/>
      <access-denied-handler error-page="/genesis?notauthorized=true"/>

     <logout logout-success-url="/genesis"/> 

    <session-management session-authentication-error-url="/genesis"> 
            <concurrency-control max-sessions="1"/>
    </session-management>

ただし、2番目のブラウザーでアプリにログインすると、何かをしようとするとすぐに最初のブラウザーに戻り、「このセッションは期限切れになりました(複数の同時ログインが試行された可能性があります)」というメッセージが表示された真っ白な画面が表示されます。同じユーザーとして」

自分の「切断されました」URLを表示するようにSpringSecurity3を構成するにはどうすればよいですか?

4

1 に答える 1

7

次のいずれかを実行できます。

  • 同時実行フィルターに認証例外をスローするように強制します(そしてそれはによって処理されます<form-login>)、
  • 独自のセッション期限切れページを提供します。

これらの状況については、SpringSecurityのマニュアルで説明されています。

<concurrency-control>属性

error-if-maximum-exceeded

「true」に設定すると、ユーザーが最大許容セッション数を超えようとすると、SessionAuthenticationExceptionが発生します。デフォルトの動作では、元のセッションを期限切れにします。

expired-url

ユーザーが許可されたセッションの数を超え、他の場所で再度ログインしたために、同時セッションコントローラーによって「期限切れ」になったセッションを使用しようとすると、ユーザーがリダイレクトされるURL。例外-if-maximum-exceededが設定されていない限り、設定する必要があります。値が指定されていない場合、有効期限メッセージが応答に直接書き戻されます。

詳細については、 ConcurrentSessionFilterおよびConcurrentSessionControlStrategyも確認してください。


あなたの質問に答える:あなたの設定には次のようなものが必要です:

<session-management session-authentication-error-url="/genesis"> 
    <concurrency-control max-sessions="1" expired-url="/sessionExpired.jsp" />
</session-management>

expired-urlと同じではないことに注意してくださいsession-authentication-error-url

于 2012-06-18T12:55:30.190 に答える