インターフェース Filter
- すべての既知の実装クラス:
GenericFilter
,HttpFilter
public interface Filter
フィルターは、リソース(サーブレットまたは静的コンテンツ)へのリクエスト、リソースからのレスポンス、その両方でフィルタリングタスクを実行するオブジェクトです。
フィルターは、
doFilter
メソッドでフィルタリングを実行します。すべてのフィルターは、初期化パラメーターを取得できる FilterConfig オブジェクトへのアクセスと、タスクのフィルタリングに必要なリソースのロードなどに使用できる ServletContext への参照を持っています。フィルターは、Web アプリケーションのデプロイ記述子で構成されます。
この設計で特定された例は次のとおりです。
- 認証フィルター
- ロギングおよび監査フィルター
- イメージ変換フィルター
- データ圧縮フィルター
- 暗号化フィルター
- トークン化フィルター
- リソースアクセスイベントをトリガーするフィルター
- XSL/T フィルター
- MIME 型チェーンフィルター
- 導入:
- Servlet 2.3
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド デフォルトメソッド 修飾子と型 メソッド 説明 default void
destroy()
Web コンテナーによって呼び出され、サービスが停止されていることをフィルターに示します。void
doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
Filter のdoFilter
メソッドは、チェーンの終わりにあるリソースに対するクライアントリクエストのために、リクエスト / レスポンスペアがチェーンを通過するたびにコンテナーによって呼び出されます。default void
init(FilterConfig filterConfig)
Web コンテナーによって呼び出され、サービスに配置されていることをフィルターに示します。
メソッドの詳細
init
default void init(FilterConfig filterConfig) throws ServletException
Web コンテナーによって呼び出され、サービスに配置されていることをフィルターに示します。
サーブレットコンテナーは、フィルターをインスタンス化した後、init メソッドを 1 回だけ呼び出します。フィルターがフィルタリング作業を行うように要求される前に、init メソッドが正常に完了する必要があります。コンテナーは、
init
メソッドで実行されたアクションが、JSR-133 のルールに従って後でdoFilter
メソッドを呼び出すすべてのスレッドに確実に表示されるようにします (つまり、init
とdoFilter
の間には「前に発生する」関連があります)。init メソッドが次のいずれかの場合、Web コンテナーはフィルターをサービスに配置できません。
- ServletException をスローします
- Web コンテナーで定義された期間内に戻らない
- パラメーター:
filterConfig
- フィルターの構成および初期化パラメーターを含むFilterConfig
オブジェクト- 例外:
ServletException
- フィルターの通常の操作を妨げる例外が発生した場合
doFilter
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOExceptionSE, ServletException
Filter のdoFilter
メソッドは、チェーンの終わりにあるリソースに対するクライアントリクエストのために、リクエスト / レスポンスペアがチェーンを通過するたびにコンテナーによって呼び出されます。このメソッドに渡された FilterChain により、フィルターはチェーンの次のエンティティにリクエストとレスポンスを渡すことができます。このメソッドの典型的な実装は、次のパターンに従います。
- リクエストを調べる
- 必要に応じて、リクエストオブジェクトをカスタム実装でラップして、入力フィルタリング用のコンテンツまたはヘッダーをフィルタリングします
- 必要に応じて、レスポンスオブジェクトをカスタム実装でラップして、出力フィルタリング用のコンテンツまたはヘッダーをフィルタリングします
- FilterChain オブジェクト(
chain.doFilter()
)を使用してチェーンの次のエンティティを呼び出すか - またはリクエスト処理をブロックするフィルターチェーンの次のエンティティにリクエスト / レスポンスペアに渡しません
- FilterChain オブジェクト(
- フィルターチェーンの次のエンティティの呼び出し後、レスポンスにヘッダーを直接設定します。
- パラメーター:
request
-ServletRequest
オブジェクトにはクライアントのリクエストが含まれますresponse
-ServletResponse
オブジェクトにはフィルターのレスポンスが含まれますchain
- 次のフィルターまたはリソースを呼び出すためのFilterChain
- 例外:
IOExceptionSE
- 処理中に I/O 関連のエラーが発生した場合ServletException
- フィルターの通常の操作を妨げる例外が発生した場合- 関連事項:
UnavailableException
destroy
default void destroy()
Web コンテナーによって呼び出され、サービスが停止されていることをフィルターに示します。
このメソッドは、フィルターの doFilter メソッド内のすべてのスレッドが終了した後、またはタイムアウト期間が経過した後にのみ呼び出されます。Web コンテナーがこのメソッドを呼び出した後は、フィルターのこのインスタンスで doFilter メソッドを再度呼び出すことはありません。
このメソッドは、フィルターが保持されているリソース(メモリ、ファイルハンドル、スレッドなど)をクリーンアップし、永続状態がメモリ内のフィルターの現在の状態と同期することを確認する機会を提供します。