Spring Security 3.0.5 と SecurityContext についていくつか質問があります。まず第一に、私が知っていることを結論付けようとします:
- SecurityContextHolder は SecurityContext を格納します
- リクエスト間、SecurityContext は HttpSession に格納されます
- リクエストの開始: SecurityContextHolder は HttpSession から SecurityContext を取得します
リクエストの終わり: SecurityContextHolder は SecurityContext を HttpSession に入れます
リクエスト中、サーバー上で、SecurityContextHolder は ThreadLocal を使用します。アプリケーション (同じ要求) のどこでも、SecurityContext にアクセスできます。
今私の質問....
--> 2 つの要求: SecurityContext インスタンスが共有されます
これはどのように作動しますか?つまり、SecurityContextHolder はリクエストごとに ThreadLocal を使用します。2 リクエスト = 2 ThreadLocals
各リクエストは次のことを行います: HttpSession からの getSessionAttribute (SecurityContext) それらが SecurityContext で機能するとどうなりますか? SecurityContext はすべての ThreadLocals で変更されていますか?
私の知る限り:はい(??)
これはどのように作動しますか?同じインスタンスでどのように作業できますか? つまり、2 つの異なる ThreadLocals を持つ 2 つの異なるスレッドが同じインスタンスでどのように機能するのか想像できませんか?
API (ThreadLocal): このクラスはスレッドローカル変数を提供します。これらの変数は、(get メソッドまたは set メソッドを介して) アクセスする各スレッドが独自の、独立して初期化された変数のコピーを持っているという点で、通常の変数とは異なります。
つまり、それだけです:コピー!多分私は間違っていて、2 つのスレッドが同じ SecurityContext で動作することはできないのでしょうか? しかし、Spring Security Documentation はそう言っています!
誰かが私にそれを説明できれば素晴らしいでしょう:-)ありがとう!