クラス FilterChainProxy
- 実装されたすべてのインターフェース:
jakarta.servlet.Filter
、org.springframework.beans.factory.Aware
、org.springframework.beans.factory.BeanNameAware
、org.springframework.beans.factory.DisposableBean
、org.springframework.beans.factory.InitializingBean
、org.springframework.context.EnvironmentAware
、org.springframework.core.env.EnvironmentCapable
、org.springframework.web.context.ServletContextAware
Filter
リクエストを委譲します。バージョン 2.0 以降、フィルターチェーンの内容を非常に細かく制御する必要がない限り、アプリケーションコンテキストで FilterChainProxy
Bean を明示的に構成する必要はありません。ほとんどの場合、デフォルトの <security:http />
名前空間構成オプションで適切にカバーされます。FilterChainProxy
は、アプリケーション web.xml
ファイルに標準の Spring DelegatingFilterProxy
宣言を追加することにより、サーブレットコンテナーフィルターチェーンにリンクされます。
構成
バージョン 3.1 以降、FilterChainProxy
は、SecurityFilterChain
インスタンスのリストを使用して構成されます。各インスタンスには、RequestMatcher
と、一致するリクエストに適用する必要があるフィルターのリストが含まれます。ほとんどのアプリケーションには 1 つのフィルターチェーンのみが含まれ、名前空間を使用している場合は、チェーンを明示的に設定する必要はありません。より細かい制御が必要な場合は、<filter-chain>
名前空間要素を利用できます。これは、URI パターンと、パターンに一致するリクエストに適用する必要があるフィルターのリスト(コンマ区切りの Bean 名として)を定義します。構成例は次のようになります。
<bean id="myfilterChainProxy" class="org.springframework.security.web.FilterChainProxy"> <constructor-arg> <util:list> <security:filter-chain pattern="/do/not/filter*" filters="none"/> <security:filter-chain pattern="/**" filters="filter1,filter2,filter3"/> </util:list> </constructor-arg> </bean>名前 "filter1"、"filter2"、"filter3" は、アプリケーションコンテキストで定義された
Filter
インスタンスの Bean 名である必要があります。名前の順序は、フィルターが適用される順序を定義します。上に示したように、「フィルター」に値 "none" を使用すると、セキュリティフィルターチェーンからリクエストパターンを完全に除外できます。使用可能な構成オプションの完全なリストについては、セキュリティ名前空間スキーマファイルを参照してください。リクエストの処理
FilterChainProxy
が処理する可能性のある各パターンを入力する必要があります。特定のリクエストの最初の一致は、そのリクエストに適用されるすべての Filter
を定義するために使用されます。つまり、最も具体的な一致をリストの一番上に配置し、特定のマッチャーに適用する必要があるすべての Filter
がそれぞれのエントリに対して入力されていることを確認する必要があります。FilterChainProxy
は、残りのマップエントリを反復処理して、追加の Filter
を見つけることはありません。
FilterChainProxy
は、Filter.doFilter(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, jakarta.servlet.FilterChain)
を呼び出さないことを選択する Filter
の通常の処理を考慮します。つまり、元の FilterChainProxy
-declared フィルターの残りの部分チェーンは呼び出されません。
ファイアウォールのリクエスト
HttpFirewall
インスタンスは、受信リクエストを検証し、一致するための一貫したパス値を提供するラップされたリクエストを作成するために使用されます。デフォルトの実装が防御する攻撃の型の詳細については、StrictHttpFirewall
を参照してください。カスタム実装を挿入して、リクエストの内容をより厳密に制御したり、アプリケーションがデフォルトで拒否される特定の型のリクエストをサポートする必要がある場合に注入したりできます。 これは、この保護が必要な場合、Spring Security フィルターを FilterChainProxy
と組み合わせて使用する必要があることを意味することに注意してください。web.xml
ファイルで明示的に定義しないでください。
FilterChainProxy
はファイアウォールインスタンスを使用して、フィルターチェーンにフィードされるリクエストオブジェクトとレスポンスオブジェクトの両方を取得します。そのため、この機能を使用してレスポンスの機能を制御することもできます。リクエストがセキュリティフィルターチェーンを通過すると、reset
メソッドが呼び出されます。デフォルトの実装では、これは、セキュリティパターンマッチングに使用される変更された値ではなく、servletPath
および pathInfo
の元の値がその後に返されることを意味します。
この追加の折り返し機能は FilterChainProxy
によって実行されるため、同じフィルターチェーンで複数のインスタンスを使用することはお勧めしません。単一の Filter
インスタンスでフィルター Bean をラップするためのユーティリティとして純粋に考えるべきではありません。
フィルターのライフサイクル
サーブレットコンテナーと IoC コンテナーの Filter
ライフサイクルの不一致に注意してください。DelegatingFilterProxy
Javadocs に従って、サーブレットコンテナーではなく、IoC コンテナーにライフサイクルの管理を許可することをお勧めします。FilterChainProxy
は、アプリケーションコンテキストに追加したフィルター Bean の標準フィルターライフサイクルメソッドを呼び出しません。
ネストされたクラスのサマリー
ネストされたクラス修飾子と型クラス説明static interface
提供されたフィルターチェーンを、特定のリクエストのSecurityFilterChain
を説明するフィルターで装飾するための戦略。static interface
static final class
FilterChainProxy.VirtualFilterChain
を使用するFilterChainProxy.FilterChainDecorator
コンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明void
void
doFilter
(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, jakarta.servlet.FilterChain chain) ListSE<jakarta.servlet.Filter>
getFilters
(StringSE url) 主にテスト用の簡易メソッド。void
setFilterChainDecorator
(FilterChainProxy.FilterChainDecorator filterChainDecorator) リクエストごとにオリジナルのFilterChain
を装飾するために使用void
setFilterChainValidator
(FilterChainProxy.FilterChainValidator filterChainValidator) (内部で)構成された各チェーンのフィルターの検証戦略を指定するために使用されます。void
setFirewall
(HttpFirewall firewall) 受信リクエストの検証とラップ(または拒否の可能性)に使用される「ファイアウォール」実装を設定します。void
setRequestRejectedHandler
(RequestRejectedHandler requestRejectedHandler) ファイアウォールによって拒否されたリクエストに使用されるRequestRejectedHandler
を設定します。void
setSecurityContextHolderStrategy
(SecurityContextHolderStrategy securityContextHolderStrategy) 使用するSecurityContextHolderStrategy
を設定します。toString()
クラス org.springframework.web.filter.GenericFilterBean から継承されたメソッド
addRequiredProperty, createEnvironment, destroy, getEnvironment, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setEnvironment, setServletContext
コンストラクターの詳細
FilterChainProxy
public FilterChainProxy()FilterChainProxy
FilterChainProxy
メソッドの詳細
afterPropertiesSet
public void afterPropertiesSet()- 次で指定:
- インターフェース
org.springframework.beans.factory.InitializingBean
のafterPropertiesSet
- オーバーライド:
- クラス
org.springframework.web.filter.GenericFilterBean
のafterPropertiesSet
doFilter
public void doFilter(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, jakarta.servlet.FilterChain chain) throws IOExceptionSE, jakarta.servlet.ServletException - 例外:
IOExceptionSE
jakarta.servlet.ServletException
getFilters
主にテスト用の簡易メソッド。- パラメーター:
url
- URL- 戻り値:
- 一致するフィルターリスト
getFilterChains
- 戻り値:
- 受信リクエストと照合されて適用される
SecurityFilterChain
のリスト。
setSecurityContextHolderStrategy
public void setSecurityContextHolderStrategy(SecurityContextHolderStrategy securityContextHolderStrategy) 使用するSecurityContextHolderStrategy
を設定します。デフォルトのアクションは、SecurityContextHolder
に格納されているSecurityContextHolderStrategy
を使用することです。- 導入:
- 5.8
setFilterChainValidator
(内部で)構成された各チェーンのフィルターの検証戦略を指定するために使用されます。- パラメーター:
filterChainValidator
-FilterChainProxy
インスタンスをチェックするために初期化中に呼び出されるバリデーターインスタンス。
setFilterChainDecorator
リクエストごとにオリジナルのFilterChain
を装飾するために使用デフォルトでは、これはフィルターチェーンを
FilterChainProxy.VirtualFilterChain
で装飾し、セキュリティフィルターを反復処理してから元の チェーンに委譲します。- パラメーター:
filterChainDecorator
- フィルターチェーンを構築するための戦略- 導入:
- 6.0
setFirewall
受信リクエストの検証とラップ(または拒否の可能性)に使用される「ファイアウォール」実装を設定します。ほとんどの要件に対して、デフォルトの実装で十分です。- パラメーター:
firewall
-
setRequestRejectedHandler
ファイアウォールによって拒否されたリクエストに使用されるRequestRejectedHandler
を設定します。- パラメーター:
requestRejectedHandler
-RequestRejectedHandler
- 導入:
- 5.2
toString