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. デフォルトの管理ユーザー(Spring 3、Spring Security)
- 3. Webアプリケーションのバージョン管理はどのように処理されますか?
- 4. <global-method-security>はSpring Securityによってコントローラ上でどのように動作しますか?
- 5. tomcat要求スレッドをどのようにデバッグできますか?
- 6. Spring Security 3.0:認証後のGET要求
- 7. Spring Security:ユーザーが自分の管理ページにアクセスできるようにする
- 8. C#Webアプリケーションでスレッドを管理するにはどうすればよいですか?
- 9. Webコンテナは着信要求を処理し、展開されたWebアプリケーションの戦争にどのように対応しますか
- 10. WP7 - ソケットアーキテクチャ - どのようにソケット接続を管理しましたか?スレッド?
- 11. asp.netはどのように同時ユーザー要求を処理しますか?
- 12. Java MVC Webアプリケーションのエラーをどのように処理/ログしますか?
- 13. Pythonでは、スレッドの作成と管理にはどのような方法が適していますか?
- 14. 私のASP.NET MVC 4アプリケーションのメンバシップをどのように管理しますか?
- 15. MSMQはどのようにメッセージを管理しますか?
- 16. sqlite3はSELECTクエリデータをどのように管理しますか?
- 17. stackoverflowはタグをどのように管理しますか
- 18. Grails Spring Securityコアプラグイン - 同時セッションをどのように制限しますか?
- 19. バージョン番号管理 - どのようにしていますか?
- 20. Workflow Foundationでどのようにバージョンを管理しますか?
- 21. Spring Security:タイムアウトログイン後にjsonファイルをブラウザに返します。通常はAjaxでのみ要求されます。
- 22. nHibernateでは、Webアプリケーションとテストプロジェクトの両方でhibernate.cfg.xmlファイルをどのように管理できますか?
- 23. AngularjsはngViewでメモリ管理をどのように処理しますか?
- 24. NON MVC Webアプリケーションでビュー/コントローラをどのように整理しますか?
- 25. monodevelopバージョン管理はどのように機能しますか?
- 26. バージョン管理はどのように機能しますか?
- 27. どのようにWebアプリケーションを構想していますか?
- 28. 複数のファイル管理をユーザーに対してどのように管理できますか?
- 29. Backbone.js/SVG Webアプリケーションのレイアウトを管理しますか?
- 30. Axis2はどのようにリクエストを処理しますか?要求ごとに新しいスレッドが作成されていますか?
http://stackoverflow.com/questions/6408007/spring-securitys-securitycontextholder-session-or-request-boundをご参照ください – Ritesh