クラス OncePerRequestFilter
- 実装されたすべてのインターフェース:
FilterEE
、Aware
、BeanNameAware
、DisposableBean
、InitializingBean
、EnvironmentAware
、EnvironmentCapable
、ServletContextAware
- 既知の直属サブクラス
AbstractRequestLoggingFilter
、CharacterEncodingFilter
、CorsFilter
、FormContentFilter
、ForwardedHeaderFilter
、HiddenHttpMethodFilter
、MultipartFilter
、OpenEntityManagerInViewFilter
、OpenSessionInViewFilter
、RelativeRedirectFilter
、RequestContextFilter
、ServerHttpObservationFilter
、ShallowEtagHeaderFilter
doFilterInternal(jakarta.servlet.http.HttpServletRequest, jakarta.servlet.http.HttpServletResponse, jakarta.servlet.FilterChain)
メソッドを提供します。 フィルターは、個別のスレッドで発生する REQUEST
EE または ASYNC
EE ディスパッチの一部として呼び出される場合があります。フィルターは、非同期ディスパッチに関与するかどうかを web.xml
で構成できます。ただし、場合によっては、サーブレットコンテナーが異なるデフォルト構成を前提とします。サブクラスはメソッド shouldNotFilterAsyncDispatch()
をオーバーライドして、スレッドの初期化、ロギング、セキュリティなどを提供するために、両方の型のディスパッチ中に一度だけ呼び出す必要がある場合、静的に宣言できます。このメカニズムは、web.xml
でフィルターをディスパッチャー型で構成する必要性を補完し、置き換えるものではありません。
サブクラスは、isAsyncDispatch(HttpServletRequest)
を使用して、非同期ディスパッチの一部としてフィルターが呼び出されるタイミングを決定し、isAsyncStarted(HttpServletRequest)
を使用して、リクエストが非同期モードになったため、現在のディスパッチが特定のリクエストの最後ではないことを決定します。
独自のスレッドでも発生するさらに別のディスパッチ型は ERROR
EE です。サブクラスは、エラーディスパッチ中に 1 回呼び出す必要がある場合に静的に宣言する場合、shouldNotFilterErrorDispatch()
をオーバーライドできます。
getAlreadyFilteredAttributeName()
メソッドは、リクエストがすでにフィルターされていることを識別する方法を決定します。デフォルトの実装は、具象フィルターインスタンスの設定名に基づいています。
- 導入:
- 06.12.2003
- 作成者:
- Juergen Hoeller, Rossen Stoyanchev, Sam Brannen
フィールドサマリー
クラス org.springframework.web.filter.GenericFilterBean から継承されたフィールド
logger
コンストラクターのサマリー
メソッドのサマリー
修飾子と型メソッド説明final void
doFilter
(ServletRequestEE request, ServletResponseEE response, FilterChainEE filterChain) このdoFilter
実装は、「すでにフィルター処理済み」のリクエスト属性を保管し、属性がすでにそこにある場合はフィルター処理せずに続行します。protected abstract void
doFilterInternal
(HttpServletRequestEE request, HttpServletResponseEE response, FilterChainEE filterChain) doFilter
と同じ契約ですが、単一のリクエストスレッド内のリクエストごとに 1 回だけ呼び出されることが保証されています。protected void
doFilterNestedErrorDispatch
(HttpServletRequestEE request, HttpServletResponseEE response, FilterChainEE filterChain) 通常、ERROR ディスパッチは、REQUEST ディスパッチが完了した後に発生し、フィルターチェーンが新たに開始されます。protected StringSE
リクエストがすでにフィルタリングされていることを識別するリクエスト属性の名前を返します。protected boolean
isAsyncDispatch
(HttpServletRequestEE request) ディスパッチャー型jakarta.servlet.DispatcherType.ASYNC
は、1 つのリクエストの過程で複数のスレッドでフィルターを呼び出すことができることを意味します。protected boolean
isAsyncStarted
(HttpServletRequestEE request) リクエスト処理が非同期モードであるかどうか。つまり、現在のスレッドが終了した後、レスポンスがコミットされないことを意味します。protected boolean
shouldNotFilter
(HttpServletRequestEE request) カスタムフィルタリングコントロールのサブクラスでオーバーライドでき、指定されたリクエストのフィルタリングを回避するためにtrue
を返します。protected boolean
ディスパッチャー型jakarta.servlet.DispatcherType.ASYNC
は、1 つのリクエストの過程で複数のスレッドでフィルターを呼び出すことができることを意味します。protected boolean
サーブレットコンテナーがweb.xml
にマッピングされたときなどのエラーディスパッチをフィルタリングするかどうか。クラス org.springframework.web.filter.GenericFilterBean から継承されたメソッド
addRequiredProperty, afterPropertiesSet, createEnvironment, destroy, getEnvironment, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setEnvironment, setServletContext
フィールドの詳細
ALREADY_FILTERED_SUFFIX
「すでにフィルタリングされた」リクエスト属性のフィルター名に追加されるサフィックス。
コンストラクターの詳細
OncePerRequestFilter
public OncePerRequestFilter()
メソッドの詳細
doFilter
public final void doFilter(ServletRequestEE request, ServletResponseEE response, FilterChainEE filterChain) throws ServletExceptionEE, IOExceptionSE このdoFilter
実装は、「すでにフィルター処理済み」のリクエスト属性を保管し、属性がすでにそこにある場合はフィルター処理せずに続行します。isAsyncDispatch
ディスパッチャー型jakarta.servlet.DispatcherType.ASYNC
は、1 つのリクエストの過程で複数のスレッドでフィルターを呼び出すことができることを意味します。フィルターが現在非同期ディスパッチ内で実行されている場合、このメソッドはtrue
を返します。- パラメーター:
request
- 現在のリクエスト- 導入:
- 3.2
- 関連事項:
isAsyncStarted
リクエスト処理が非同期モードであるかどうか。つまり、現在のスレッドが終了した後、レスポンスがコミットされないことを意味します。- パラメーター:
request
- 現在のリクエスト- 導入:
- 3.2
- 関連事項:
getAlreadyFilteredAttributeName
リクエストがすでにフィルタリングされていることを識別するリクエスト属性の名前を返します。デフォルトの実装では、構成された具象フィルターインスタンスの名前を使用して、".FILTERED" を追加します。フィルターが完全に初期化されていない場合、そのクラス名にフォールバックします。
shouldNotFilter
カスタムフィルタリングコントロールのサブクラスでオーバーライドでき、指定されたリクエストのフィルタリングを回避するためにtrue
を返します。デフォルトの実装は、常に
false
を返します。- パラメーター:
request
- 現在の HTTP リクエスト- 戻り値:
- 指定されたリクエストを濾過するべきではありませんか
- 例外:
ServletExceptionEE
- エラーの場合
shouldNotFilterAsyncDispatch
protected boolean shouldNotFilterAsyncDispatch()ディスパッチャー型jakarta.servlet.DispatcherType.ASYNC
は、1 つのリクエストの過程で複数のスレッドでフィルターを呼び出すことができることを意味します。一部のフィルターは最初のスレッドをフィルタリングするだけで済みます (例: リクエスト折り返し)。その他のフィルターは、たとえばスレッドローカルを設定するため、または最後に最終処理を実行するために、追加のスレッドごとに少なくとも 1 回呼び出す必要があります。フィルターは、
web.xml
を介して特定のディスパッチャー型を処理するように、またはServletContext
を介して Java で処理するようにマップできますが、サーブレットコンテナーはディスパッチャー型に関して異なるデフォルトを適用する場合があることに注意してください。このフラグは、フィルターの設計意図を強制します。デフォルトの戻り値は "true" です。これは、後続の非同期ディスパッチ中にフィルターが呼び出されないことを意味します。"false" の場合、フィルターは非同期ディスパッチ中に呼び出され、単一スレッド内のリクエスト中に 1 回だけ呼び出されるという同じ保証があります。
- 導入:
- 3.2
shouldNotFilterErrorDispatch
protected boolean shouldNotFilterErrorDispatch()サーブレットコンテナーがweb.xml
にマッピングされたときなどのエラーディスパッチをフィルタリングするかどうか。デフォルトの戻り値は "true" です。これは、エラーディスパッチの場合にフィルターが呼び出されないことを意味します。- 導入:
- 3.2
doFilterInternal
protected abstract void doFilterInternal(HttpServletRequestEE request, HttpServletResponseEE response, FilterChainEE filterChain) throws ServletExceptionEE, IOExceptionSE doFilter
と同じ契約ですが、単一のリクエストスレッド内のリクエストごとに 1 回だけ呼び出されることが保証されています。詳細については、shouldNotFilterAsyncDispatch()
を参照してください。デフォルトの ServletRequest および ServletResponse の代わりに、HttpServletRequest および HttpServletResponse 引数を提供します。
doFilterNestedErrorDispatch
protected void doFilterNestedErrorDispatch(HttpServletRequestEE request, HttpServletResponseEE response, FilterChainEE filterChain) throws ServletExceptionEE, IOExceptionSE 通常、ERROR ディスパッチは、REQUEST ディスパッチが完了した後に発生し、フィルターチェーンが新たに開始されます。ただし、一部のサーバーでは、ERROR ディスパッチが REQUEST ディスパッチ内にネストされている場合があります。レスポンスでsendError
を呼び出した結果。その場合、同じスレッドのチェーンフィルターにまだありますが、リクエストとレスポンスは元のラップされていないものに切り替えられています。サブクラスはこのメソッドを使用して、ネストされた ERROR ディスパッチをフィルタリングし、リクエストまたはレスポンスにラップを再適用できます。
ThreadLocal
コンテキスト(存在する場合)は、フィルターチェーン内に入れ子になっているため、まだアクティブである必要があります。- 例外:
ServletExceptionEE
IOExceptionSE
- 導入:
- 5.1.9