2012-05-02 20 views
3

春のセキュリティとセッションの無効化についての質問です。ログアウトによる春のセキュリティセッションの無効化

ConcurrentSessionControlStrategyでセッションを無効にすると、セッションはremoveSessionInformationメソッドを呼び出すことによってSessionRegistryから削除されますが、手動ログアウトによってセッションが無効にされた場合、HttpSessionは無効になりますが、SessionRegistryの呼び出しはありませんそこ。

私は、HttpSessionDestroyedEventイベントをキャプチャしているリスナとしてHttpSessionEventPublisherを追加しましたが、SessionRegistryを再度呼び出すことはありません。

私はLogoutFilterの独自の実装を作成し、removeSessionInformationを手動で呼び出すハンドラを追加することでこれを回避しましたが、可能であれば標準の春の注釈を使用できるようにしたいと考えています。 (NBセッションがすでに無効になっているため、セッションIDにアクセスできないため、標準ログアウトタグのsuccess-handler-refフィールドを使用することはできません)

ここには何かがありますか?これは春が逃したものですか?

これは、途中でSpring Security 3.1.0を使用しています。

+0

あなたがやろうとしていますか? – NimChimpsky

+0

私は1人のユーザーに1セッションしか許可しないアプリを持っています。ユーザーにすでにセッションがある場合、同時戦略をトリガーするアクティブなセッションを終了するかどうかをログオンするかどうかを確認するメッセージが表示され、セッションレジストリからセッションが削除されます。ユーザはログアウトフィルタを起動してHTTPセッションを無効にしますが、リポジトリからセッションを削除しないでログアウトすることもできます。私が言ったように、解決策があります。logoutFilterをカスタマイズせずにこれを行う方法があるかどうか不思議です。 – Rene

答えて

2

私は同じ問題がありました。私の場合、ソリューションは別のスプリングビーンとしてSessionRegistryを作成することでした。 ConcurrentSessionControlStrategyはレジストリへのリンクを保持しているので、無効なセッションを直接削除できます。しかしSecurityContextLogoutHandlersession.invalidate()を使用していますので、sessionDestroyedサーブレットイベントは、サーブレットコンテナによってHttpSessionEventPublisherに提供されるが、それは春の豆ではないときHttpSessionEventPublisherによってコンテキストを春に発表されHttpSessionDestroyedEventSessionRegistryに来ていません。

このセキュリティ設定は動作しませんでした:

... 
SessionRegistry sessionRegistry = new SessionRegistryImpl(); 
ConcurrentSessionControlStrategy concurrentSessionControlStrategy = new ConcurrentSessionControlStrategy(sessionRegistry); 
... 

この1つが正常に動作します:

@Bean 
public SessionRegistry sessionRegistry() { 
    return new SessionRegistryImpl(); 
} 
... 
ConcurrentSessionControlStrategy concurrentSessionControlStrategy = new ConcurrentSessionControlStrategy(sessionRegistry()) 
... 
+0

私は別のプロジェクトに移ってしまったので、私の場合はこれを確認できませんが、シンプルな解決策のようです。 – Rene

関連する問題