私のアプリケーションには、Spring Web セキュリティを使用する Web アプリケーションを実行する組み込みの jetty サーバー (バージョン 8.1.2) があります。jetty サーバーは、JDBCSessionManager
spring が採用するセキュリティ フィルターの 1 つは のサブクラスでありAbstractAuthenticationProcessingFilter
、SessionAuthenticationStrategy
その中にデフォルトでSessionFixationProtectionStrategy
. この保護戦略は、元のセッションのコピーとして新しいセッションを作成し、古いセッションを無効にします。
Web アプリケーションにログインしようとすると、新しいセッションが作成されていることがわかりますが、新しいセッションに追加された認証属性がデータベースに書き戻されません。さらに、無効化されたにもかかわらず、古いセッションが新しい属性でデータベースに書き込まれていることがわかります。
最後に、新しい http 要求が新しいセッションの一部として到着すると、上記の理由で認証に合格しません。
調査の結果、古いバージョンの jetty (7.1.4 を試しました) ではこの動作が発生しないことがわかり、新しいセッション データがデータベースに書き込まれていることがわかりました。
もちろん、次のいずれかでこの問題を解決できます。
- 古いバージョンの jetty を使用する
- セッション固定保護戦略を無効にする
- の代わりにデフォルトのセッション マネージャを使用します。
JDBCSessionManager
しかし、上記のオプションのいずれも有効ではないと仮定すると、この問題の解決策があるかどうか疑問に思っていました.
ありがとう!