クラス FilterChainProxy
- java.lang.Object
-
- org.springframework.web.filter.GenericFilterBean
-
- org.springframework.security.web.FilterChainProxy
- 実装されたすべてのインターフェース:
javax.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
public class FilterChainProxy extends org.springframework.web.filter.GenericFilterBean
Spring 管理のフィルター Bean のリストにFilter
リクエストを委譲します。バージョン 2.0 以降、フィルターチェーンの内容を非常に細かく制御する必要がない限り、アプリケーションコンテキストでFilterChainProxy
Bean を明示的に構成する必要はありません。ほとんどの場合、デフォルトの<security:http />
名前空間構成オプションで適切にカバーされます。FilterChainProxy
は、アプリケーションweb.xml
ファイルに標準の SpringDelegatingFilterProxy
宣言を追加することにより、サーブレットコンテナーフィルターチェーンにリンクされます。構成
バージョン 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(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.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
FilterChainProxy.FilterChainValidator
コンストラクターのサマリー
コンストラクター コンストラクター 説明 FilterChainProxy()
FilterChainProxy(java.util.List<SecurityFilterChain> filterChains)
FilterChainProxy(SecurityFilterChain chain)
メソッドのサマリー
すべてのメソッド インスタンスメソッド 具象メソッド 修飾子と型 メソッド 説明 void
afterPropertiesSet()
void
doFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain)
java.util.List<SecurityFilterChain>
getFilterChains()
java.util.List<javax.servlet.Filter>
getFilters(java.lang.String url)
主にテスト用の簡易メソッド。void
setFilterChainValidator(FilterChainProxy.FilterChainValidator filterChainValidator)
(内部で)構成された各チェーンのフィルターの検証戦略を指定するために使用されます。void
setFirewall(HttpFirewall firewall)
受信リクエストの検証とラップ(または拒否の可能性)に使用される「ファイアウォール」実装を設定します。void
setRequestRejectedHandler(RequestRejectedHandler requestRejectedHandler)
ファイアウォールによって拒否されたリクエストに使用されるRequestRejectedHandler
を設定します。java.lang.String
toString()
コンストラクターの詳細
FilterChainProxy
public FilterChainProxy()
FilterChainProxy
public FilterChainProxy(SecurityFilterChain chain)
FilterChainProxy
public FilterChainProxy(java.util.List<SecurityFilterChain> filterChains)
メソッドの詳細
afterPropertiesSet
public void afterPropertiesSet()
- 次で指定:
- インターフェース
org.springframework.beans.factory.InitializingBean
のafterPropertiesSet
- オーバーライド:
- クラス
org.springframework.web.filter.GenericFilterBean
のafterPropertiesSet
doFilter
public void doFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain) throws java.io.IOException, javax.servlet.ServletException
- 例外:
java.io.IOException
javax.servlet.ServletException
getFilters
public java.util.List<javax.servlet.Filter> getFilters(java.lang.String url)
主にテスト用の簡易メソッド。- パラメーター:
url
- URL- 戻り値:
- 一致するフィルターリスト
getFilterChains
public java.util.List<SecurityFilterChain> getFilterChains()
- 戻り値:
- 受信リクエストと照合されて適用される
SecurityFilterChain
のリスト。
setFilterChainValidator
public void setFilterChainValidator(FilterChainProxy.FilterChainValidator filterChainValidator)
(内部で)構成された各チェーンのフィルターの検証戦略を指定するために使用されます。- パラメーター:
filterChainValidator
-FilterChainProxy
インスタンスをチェックするために初期化中に呼び出されるバリデーターインスタンス。
setFirewall
public void setFirewall(HttpFirewall firewall)
受信リクエストの検証とラップ(または拒否の可能性)に使用される「ファイアウォール」実装を設定します。ほとんどの要件に対して、デフォルトの実装で十分です。- パラメーター:
firewall
-
setRequestRejectedHandler
public void setRequestRejectedHandler(RequestRejectedHandler requestRejectedHandler)
ファイアウォールによって拒否されたリクエストに使用されるRequestRejectedHandler
を設定します。- パラメーター:
requestRejectedHandler
-RequestRejectedHandler
- 導入:
- 5.2
toString
public java.lang.String toString()
- オーバーライド:
- クラス
java.lang.Object
のtoString