セキュリティーフィルターの流れ
以下のフィルターチェーンの流れがSpring Securityの基本的な認証・認可処理のベースとなっている。
またこの「フィルターチェーンを通じて、セキュリティチェックが順番に実行され、最終的にリクエストがサーブレットに届く流れ」をダウンストリーム
という。
①クライアントからリクエストが送られてくる
②フィルターチェーン(Filter0,Filter1,Filter2)を通る
③サーブレット(Javaアプリケーション)に到達
④サーブレットがレスポンスを作成し、クライアントに返却
DelegatingFilterProxy、FilterChainProxy、SecurityFilterChain
DelegatingFilterProxy
-
Tomcatなどのサーブレットコンテナのフィルターチェーン
とSpringのApplicationContext内のフィルターチェーン
を橋渡しする役割を持ち、サーブレットコンテナが受け取ったリクエストをSpringのセキュリティフィルターに委譲する - Springの
Bean
として定義されたフィルターをサーブレットコンテナから動的に呼び出すための代理人のようなもの - サーブレットコンテナに依存しない形で、セキュリティのフィルターの設定や管理をSpringの中で柔軟に行うことができるため、DIによる依存性注入が可能となる
- つまり以下の図でいう
Bean Filter0
が実際のセキュリティチェックやその他の処理を行う
※Spring開発では、アプリケーション内で使うオブジェクト(サービスクラスやDAOなど)を手動で作るのではなく、Springが自動的に作ってくれる仕組みがあり、その自動的に作られたオブジェクト
をBean
と呼ぶ。
Bean Filter
Springでは、フィルターも含めて、必要なオブジェクト(サービスクラスやDAOなど)はすべてApplicationContext
、によって管理され、その管理されたオブジェクトをBean
と呼ぶ。
※ApplicationContextとはSpringフレームワークが提供する依存性注入(DI)の仕組みを管理するコンテナです。
Springでは、アプリケーションの各コンポーネント(サービス、リポジトリ、フィルターなど)をBeanとして定義し、それらの依存関係などを管理できる。
FilterChainProxy
- 下記で説明する
SecurityFilterChain
内に含まれるセキュリティ関連のフィルター(認証フィルター、認可フィルター、CSRFフィルターなど)を順番に管理し、リクエストに対して適切なセキュリティ処理を実行する管理人のような役割 - 上記で出てきた
DelegatingFilterProxy
から処理を任される - 下図がSpring Securityでよく使われる一般的なパターン
SecurityFilterChain
- セキュリティフィルター(認証フィルター、認可フィルター、CSRFフィルターなど)のグループのようなもの
- 上記で出てきた
Bean Filter
の集まりのようなもの
参考
以下のSpring Securityの公式ドキュメントを参考にしました。
Architecture