public class DelegatingFilterProxy extends GenericFilterBean
web.xml
で "targetBeanName" フィルター init-param をサポートし、Spring アプリケーションコンテキスト内のターゲット Bean の名前を指定します。web.xml
は通常 DelegatingFilterProxy
定義を含み、指定された filter-name
は Spring のルートアプリケーションコンテキストの Bean 名に対応します。フィルタープロキシへのすべての呼び出しは、Spring コンテキストでその Bean に委譲されます。これは、標準のサーブレットフィルターインターフェースを実装するために必要です。
このアプローチは、複雑なセットアップが必要な Filter の実装に特に役立ち、完全な Spring Bean 定義機構を Filter インスタンスに適用できます。または、Spring ルートアプリケーションコンテキストからサービス Bean を検索することと組み合わせて、標準のフィルター設定を検討してください。
注 : サーブレットフィルターインターフェースによって定義されたライフサイクルメソッドは、デフォルトではターゲット Bean に委譲されず、Spring アプリケーションコンテキストに依存してその Bean のライフサイクルを管理します。"targetFilterLifecycle" フィルターの init-param を "true" に指定すると、ターゲット Bean で Filter.init
および Filter.destroy
ライフサイクルメソッドが強制的に呼び出され、サーブレットコンテナーがフィルターライフサイクルを管理できるようになります。
Spring 3.1 以降、DelegatingFilterProxy
は、Servlet 3.0 のインスタンスベースのフィルター登録メソッドを通常 Spring 3.1 の WebApplicationInitializer
SPI と組み合わせて使用するときに、コンストラクターパラメーターをオプションで受け入れるように更新されました。これらのコンストラクターにより、デリゲートフィルター Bean を直接提供したり、フェッチするアプリケーションコンテキストと Bean 名を提供したりできるため、ServletContext からアプリケーションコンテキストをルックアップする必要がなくなります。
このクラスは、元々、Ben Alex によって書かれた Spring Security の FilterToBeanProxy
クラスに触発されました。
setTargetBeanName(java.lang.String)
, setTargetFilterLifecycle(boolean)
, Filter.doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
EE, Filter.init(javax.servlet.FilterConfig)
EE, Filter.destroy()
EE, DelegatingFilterProxy(Filter)
, DelegatingFilterProxy(String)
, DelegatingFilterProxy(String, WebApplicationContext)
, ServletContext.addFilter(String, Filter)
EE, WebApplicationInitializer
logger
コンストラクターと説明 |
---|
DelegatingFilterProxy() 新しい DelegatingFilterProxy を作成します。 |
DelegatingFilterProxy(FilterEE delegate) 指定された Filter EE デリゲートで新しい DelegatingFilterProxy を作成します。 |
DelegatingFilterProxy(StringSE targetBeanName) ServletContext にある Spring WebApplicationContext (「ルート」アプリケーションコンテキストまたは setContextAttribute(java.lang.String) で指定されたコンテキスト)から名前付きターゲット Bean を取得する新しい DelegatingFilterProxy を作成します。 |
DelegatingFilterProxy(StringSE targetBeanName, WebApplicationContext wac) 指定された Spring WebApplicationContext から名前付きターゲット Bean を取得する新しい DelegatingFilterProxy を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
void | destroy() サブクラスはこれをオーバーライドして、カスタムフィルターのシャットダウンを実行できます。 |
protected void | destroyDelegate(FilterEE delegate) Filter デリゲートを破棄します。 |
void | doFilter(ServletRequestEE request, ServletResponseEE response, FilterChainEE filterChain) Filter の doFilter メソッドは、チェーンの終わりにあるリソースに対するクライアントリクエストのために、リクエスト / レスポンスペアがチェーンを通過するたびにコンテナーによって呼び出されます。 |
protected WebApplicationContext | findWebApplicationContext() 可能な場合、構築時に渡された WebApplicationContext を返します。 |
StringSE | getContextAttribute() デリゲート Filter EE Bean をロードする WebApplicationContext を取得するために使用する必要がある ServletContext 属性の名前を返します。 |
protected StringSE | getTargetBeanName() Spring アプリケーションコンテキスト内のターゲット Bean の名前を返します。 |
protected FilterEE | initDelegate(WebApplicationContext wac) Bean として指定された Spring アプリケーションコンテキストとして定義されたフィルターデリゲートを初期化します。 |
protected void | initFilterBean() サブクラスはこれをオーバーライドして、カスタム初期化を実行できます。 |
protected void | invokeDelegate(FilterEE delegate, ServletRequestEE request, ServletResponseEE response, FilterChainEE filterChain) 実際に、指定されたリクエストとレスポンスでデリゲートフィルターを呼び出します。 |
protected boolean | isTargetFilterLifecycle() ターゲット Bean で Filter.init および Filter.destroy ライフサイクルメソッドを呼び出すかどうかを返します。 |
void | setContextAttribute(StringSE contextAttribute) デリゲート Filter EE Bean をロードする WebApplicationContext を取得するために使用する必要がある ServletContext 属性の名前を設定します。 |
void | setTargetBeanName(StringSE targetBeanName) Spring アプリケーションコンテキストでターゲット Bean の名前を設定します。 |
void | setTargetFilterLifecycle(boolean targetFilterLifecycle) ターゲット Bean で Filter.init および Filter.destroy ライフサイクルメソッドを呼び出すかどうかを設定します。 |
addRequiredProperty, afterPropertiesSet, createEnvironment, getEnvironment, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, setBeanName, setEnvironment, setServletContext
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public DelegatingFilterProxy()
DelegatingFilterProxy
を作成します。web.xml
での従来の(サーブレット以前の 3.0)の使用。public DelegatingFilterProxy(FilterEE delegate)
Filter
EE デリゲートで新しい DelegatingFilterProxy
を作成します。Spring アプリケーションコンテキストとのやり取り、ターゲット Bean 名の指定などの必要性を完全に回避します。フィルターのインスタンスベースの登録がサポートされている Servlet 3.0+ 環境で使用します。
delegate
- このプロキシが委譲してライフサイクルを管理する Filter
インスタンス(null
であってはならない)doFilter(ServletRequest, ServletResponse, FilterChain)
, invokeDelegate(Filter, ServletRequest, ServletResponse, FilterChain)
, destroy()
, GenericFilterBean.setEnvironment(org.springframework.core.env.Environment)
public DelegatingFilterProxy(StringSE targetBeanName)
ServletContext
にある Spring WebApplicationContext
(「ルート」アプリケーションコンテキストまたは setContextAttribute(java.lang.String)
で指定されたコンテキスト)から名前付きターゲット Bean を取得する新しい DelegatingFilterProxy
を作成します。フィルターのインスタンスベースの登録がサポートされている Servlet 3.0+ 環境で使用します。
ターゲット Bean は、標準のサーブレットフィルターを実装する必要があります。
targetBeanName
- Spring アプリケーションコンテキストで検索するターゲットフィルター Bean の名前(null
であってはなりません)。findWebApplicationContext()
, GenericFilterBean.setEnvironment(org.springframework.core.env.Environment)
public DelegatingFilterProxy(StringSE targetBeanName, @Nullable WebApplicationContext wac)
WebApplicationContext
から名前付きターゲット Bean を取得する新しい DelegatingFilterProxy
を作成します。フィルターのインスタンスベースの登録がサポートされている Servlet 3.0+ 環境で使用します。
ターゲット Bean は、標準のサーブレットフィルターインターフェースを実装する必要があります。
指定された WebApplicationContext
は、渡されたときにリフレッシュされる場合とされない場合があります。そうでない場合、およびコンテキストが ConfigurableApplicationContext
を実装している場合は、名前付きターゲット Bean を取得する前に refresh()
が試行されます。
このプロキシの Environment
は、指定された WebApplicationContext
から継承されます。
targetBeanName
- Spring アプリケーションコンテキスト内のターゲットフィルター Bean の名前(null
であってはなりません)。wac
- ターゲットフィルターを取得するアプリケーションコンテキスト。null
の場合、アプリケーションコンテキストはフォールバックとして ServletContext
から検索されます。findWebApplicationContext()
, GenericFilterBean.setEnvironment(org.springframework.core.env.Environment)
public void setContextAttribute(@Nullable StringSE contextAttribute)
Filter
EE Bean をロードする WebApplicationContext
を取得するために使用する必要がある ServletContext 属性の名前を設定します。@Nullable public StringSE getContextAttribute()
Filter
EE Bean をロードする WebApplicationContext
を取得するために使用する必要がある ServletContext 属性の名前を返します。public void setTargetBeanName(@Nullable StringSE targetBeanName)
デフォルトでは、web.xml
の DelegatingFilterProxy に指定された filter-name
が使用されます。
@Nullable protected StringSE getTargetBeanName()
public void setTargetFilterLifecycle(boolean targetFilterLifecycle)
Filter.init
および Filter.destroy
ライフサイクルメソッドを呼び出すかどうかを設定します。デフォルトは "false" です。ターゲット Bean は通常、ライフサイクルを管理するために Spring アプリケーションコンテキストに依存しています。このフラグを "true" に設定すると、サーブレットコンテナーがターゲットフィルターのライフサイクルを制御し、このプロキシが対応する呼び出しを委譲します。
protected boolean isTargetFilterLifecycle()
Filter.init
および Filter.destroy
ライフサイクルメソッドを呼び出すかどうかを返します。protected void initFilterBean() throws ServletExceptionEE
GenericFilterBean
メモ: このメソッドは、Spring アプリケーションコンテキストでの標準のフィルター初期化およびフィルター Bean 初期化から呼び出されます。フィルター名と ServletContext はどちらの場合でも使用できます。
このデフォルトの実装は空です。
GenericFilterBean
の initFilterBean
ServletExceptionEE
- サブクラスの初期化が失敗した場合 GenericFilterBean.getFilterName()
, GenericFilterBean.getServletContext()
public void doFilter(ServletRequestEE request, ServletResponseEE response, FilterChainEE filterChain) throws ServletExceptionEE, IOExceptionSE
javax.servlet.FilterEE
doFilter
メソッドは、チェーンの終わりにあるリソースに対するクライアントリクエストのために、リクエスト / レスポンスペアがチェーンを通過するたびにコンテナーによって呼び出されます。このメソッドに渡された FilterChain により、フィルターはチェーンの次のエンティティにリクエストとレスポンスを渡すことができます。このメソッドの典型的な実装は、次のパターンに従います。
chain.doFilter()
)を使用してチェーンの次のエンティティを呼び出すかrequest
- ServletRequest
オブジェクトにはクライアントのリクエストが含まれます response
- ServletResponse
オブジェクトにはフィルターのレスポンスが含まれます filterChain
- 次のフィルターまたはリソースを呼び出すための FilterChain
ServletExceptionEE
- フィルターの通常の操作を妨げる例外が発生した場合 IOExceptionSE
- 処理中に I/O 関連のエラーが発生した場合 UnavailableException
EEpublic void destroy()
GenericFilterBean
メモ: このメソッドは、標準のフィルター破棄および Spring アプリケーションコンテキストでのフィルター Bean 破棄から呼び出されます。
このデフォルトの実装は空です。
FilterEE
の destroyEE
DisposableBean
の destroy
GenericFilterBean
の destroy
@Nullable protected WebApplicationContext findWebApplicationContext()
WebApplicationContext
を返します。そうでなければ、と ServletContext
属性から WebApplicationContext
を取得しようと設定された名前のセットならば。それ以外の場合は、よく知られている「ルート」アプリケーションコンテキスト属性で WebApplicationContext
を検索します。このフィルターを初期化(または呼び出し)する前に、WebApplicationContext
がすでにロードされ、ServletContext
に保管されている必要があります。 サブクラスはこのメソッドをオーバーライドして、別の WebApplicationContext
取得戦略を提供できます。
WebApplicationContext
、または見つからない場合は null
DelegatingFilterProxy(String, WebApplicationContext)
, getContextAttribute()
, WebApplicationContextUtils.getWebApplicationContext(javax.servlet.ServletContext)
, WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
protected FilterEE initDelegate(WebApplicationContext wac) throws ServletExceptionEE
デフォルトの実装では、アプリケーションコンテキストから Bean をフェッチし、その上で標準の Filter.init
メソッドを呼び出して、このフィルタープロキシの FilterConfig を渡します。
wac
- ルートアプリケーションコンテキスト ServletExceptionEE
- フィルターによってスローされた場合 getTargetBeanName()
, isTargetFilterLifecycle()
, GenericFilterBean.getFilterConfig()
, Filter.init(javax.servlet.FilterConfig)
EEprotected void invokeDelegate(FilterEE delegate, ServletRequestEE request, ServletResponseEE response, FilterChainEE filterChain) throws ServletExceptionEE, IOExceptionSE
delegate
- デリゲートフィルター request
- 現在の HTTP リクエスト response
- 現在の HTTP レスポンス filterChain
- 現在の FilterChainServletExceptionEE
- フィルターによってスローされた場合 IOExceptionSE
- フィルターによってスローされた場合 protected void destroyDelegate(FilterEE delegate)
Filter.destroy
を呼び出すだけです。delegate
- フィルターデリゲート (非 null
)isTargetFilterLifecycle()
, Filter.destroy()
EE