SpringSecurityには、クラス名SecurityContextHolderとその仕様があります。 '指定されたSecurityContextを現在の実行スレッドに関連付けます。'要求がサーバーに来るたびにWebアプリケーションでSpringもリロードし、スレッドのSecurityContextHolderでその要求のSecurityContextを設定しますか?Spring SecurityはどのようにしてWebアプリケーション要求のスレッドでSecurityContextを管理しますか?
答えて
Webアプリケーションでは、リクエストがサーバーに到着するたびにSpringもリロードし、そのリクエストのSecurityContextをそのスレッドのSecurityContextHolderに設定しますか?
基本的にはい。
デフォルト動作のSecurityContextHolder.getInstance()
は、現在のスレッドのスレッドローカルとして格納されたSecurityContextHolder
インスタンスを返すことです。 (これが唯一のデフォルトのメカニズムである。あなたはSecurityContextHolder.setStrategemName()
を呼び出すことによってSecurityContextHolder
を見つけるためのさまざまな戦略を使用することができます)
SpringSecurityフィルタが要求のSecurityContextHolder
が(ただし、それが配置されている)開始時に要求の資格情報がロードされていることを確認し、要求処理の終了時にホルダーがクリアされたことを示します。
エラボレーション、キーはリモート呼び出しは、セキュリティ属性にフィルタが見えることですコンテキスト。セキュリティコンテキストがリモート呼び出し属性にある場合のみ、SecurityContextHolderで設定できます。このセキュリティコンテキストは、通常、クライアントから、発信呼び出しを処理し、スレッドローカルからのセキュリティコンテキストをリモート呼び出しに配置する類似のフィルタを使用して提供されます。 – Zach
[なぜこれは動作しません](https://github.com/spring-projects/spring-security/issues/3919)私のために? [stackoverflow question](http://stackoverflow.com/questions/34273755/why-is-the-authentication-object-of-the-securitycontext-not-shared-across-thread)を参照してください。 – displayname
はい、SecurityContextPersistenceFilterがこれを処理します。デフォルトでは、HttpSession内にSecurityContextが配置され、SecurityContextHolderを介してスレッドにバインドされます。リクエストの処理が終了すると、逆の処理が実行されます。スレッドからSecurityContextを取得し、セッションに配置します。 Javadocのより
:要求が完了し コンテキストホルダをクリア一旦
それはリポジトリに先立っ リクエストとストアへ 構成SecurityContextRepositoryから得られた情報とSecurityContextHolderバック移入します。デフォルトでは、 HttpSessionSecurityContextRepositoryが使用されます。
スレッドセーフでもありませんか? 'SecurityContext'が私のアプリケーションのスレッド間で共有されていないようです([リンク](http://stackoverflow.com/questions/34273755/why-is-the-authentication-object-of-the-securitycontext-not -shared-across-thread))。 – displayname
- 1. Springでオブジェクトプーリングをどのように管理しますか?
- 2. Webアプリケーションのバージョン管理はどのように処理されますか?
- 3. デフォルトの管理ユーザー(Spring 3、Spring Security)
- 4. Spring Security Listをどのように反復処理しますか?
- 5. tomcat要求スレッドをどのようにデバッグできますか?
- 6. <global-method-security>はSpring Securityによってコントローラ上でどのように動作しますか?
- 7. Spring SecurityでSpring Bootでセッションを管理する方法は?
- 8. C#Webアプリケーションでスレッドを管理するにはどうすればよいですか?
- 9. Spring Security:ユーザーが自分の管理ページにアクセスできるようにする
- 10. WP7 - ソケットアーキテクチャ - どのようにソケット接続を管理しましたか?スレッド?
- 11. Webコンテナは着信要求を処理し、展開されたWebアプリケーションの戦争にどのように対応しますか
- 12. OSX Swiftアプリケーションで管理者ログインを要求するにはどうすればよいですか?
- 13. Spring MVC/Java/Springブート/ etcで要求の並行性をどのようにして確認できますか?
- 14. Spring Security 3.0:認証後のGET要求
- 15. Java MVC Webアプリケーションのエラーをどのように処理/ログしますか?
- 16. Pythonでは、スレッドの作成と管理にはどのような方法が適していますか?
- 17. メモリはスレッド内でどのように管理されますか?
- 18. フィルタはSpring Securityの認証プロバイダとどのように対話しますか?
- 19. 私のASP.NET MVC 4アプリケーションのメンバシップをどのように管理しますか?
- 20. CORSプラグイン/ --disable-web-securityはどのようにブラウザ上で動作しますか?
- 21. asp.netはどのように同時ユーザー要求を処理しますか?
- 22. 他のすべてのWebアプリケーションを管理するために、エントリポイントのWebアプリケーションを作成するにはどうすればよいですか?
- 23. nHibernateでは、Webアプリケーションとテストプロジェクトの両方でhibernate.cfg.xmlファイルをどのように管理できますか?
- 24. コンパイラはどのようにメモリフットプリントを管理しますか?
- 25. sqlite3はSELECTクエリデータをどのように管理しますか?
- 26. Tomcatはどのようにセッションを管理しますか?
- 27. stackoverflowはタグをどのように管理しますか
- 28. Tensorflowはどのようにグラフを管理しますか?
- 29. MSMQはどのようにメッセージを管理しますか?
- 30. s3n/s3aはどのようにファイルを管理しますか?
http://stackoverflow.com/questions/6408007/spring-securitys-securitycontextholder-session-or-request-boundをご参照ください – Ritesh