1

Spring 3.1.1.Release、Security 3.1.0.Release を使用しています。

Web アプリにログイン/ログアウトを追加しましたが、セッション スコープ Bean が以前のように機能していません。Bean は、CMSConnector と呼ばれる CMS に接続するために使用されます。

ユーザーを認証するために、AuthenticationProvider を実装し、authenticate() 呼び出しで、セッション スコープの CMSConnector を取得し、CMSConnector.login() を呼び出します。CMS ログインに失敗すると、ログインに失敗します。

問題 -

ログインが成功すると、ログインが成功した直後に @predestroy logout() が呼び出されます。その後、SessionFixationProtectionStrategy が前のセッションの無効化を呼び出し、新しいセッションを割り当てていることがわかりました。

session.invalidate();
session = request.getSession(true); // we now have a new session

invalidate() は、セッション スコープの Bean で @predestroy メソッドを呼び出しています。

そのため、接続を閉じずに @predestroy アノテーションを一時的に削除しました。(非常に悪い習慣です。)

問題を解決するための回避策は何ですか?

@PostConstruct を作成してそこにログイン プロセスを配置しようとしましたが、request.getSession(true) が呼び出されたときに @PostConstruct が呼び出されません。

ありがとう!

ジェイソン

4

2 に答える 2

0

私は元の質問を解決しませんでしたが、回避策を実装しました-@predestroyでアタッチする代わりに、セッションexpireオブジェクトでexpireセッションを実行します。

于 2012-07-03T21:05:26.657 に答える
0

SessionFixationProtectionStrategy ではなく、ConcurrentSessionControlStrategy だと思います。

このコードスニペットに max-sessions="-1" を設定します

于 2012-04-14T21:23:36.327 に答える