61.3. コンテナー応答フィルター
概要 リンクのコピーリンクがクリップボードにコピーされました!
本セクションでは、コンテナー応答フィルターを実装して登録する方法を説明します。このフィルターは、サーバー側で送信応答メッセージをインターセプトするために使用されます。コンテナー応答フィルターは、応答メッセージでのヘッダーの自動設定に使用でき、通常、あらゆる種類の汎用的な応答処理に使用できます。
ContainerResponseFilter インターフェイス リンクのコピーリンクがクリップボードにコピーされました!
javax.ws.rs.container.ContainerResponseFilter インターフェイスは以下のように定義されます。
ContainerResponseFilter を実装することで、サーバー側で ContainerResponse エクステンションポイントのフィルターを作成できます。これは、呼び出しの実行 後 にレスポンスメッセージをフィルタリングします。
コンテナーレスポンスフィルターでは、リクエストメッセージ (requestContext 引数経由) とレスポンスメッセージ (responseContext メッセージ経由) の両方にアクセスできますが、この段階ではレスポンスのみを変更できます。
ContainerResponseContext インターフェイス リンクのコピーリンクがクリップボードにコピーされました!
ContainerResponseFilter の filter メソッドは、型 javax.ws.rs.container.ContainerRequestContext の引数 (「ContainerRequestContext インターフェイス」を参照) と型 javax.ws.rs.container.ContainerResponseContext の引数 (送信レスポンスメッセージとその関連データにアクセスするために使用できる) の 2 つの引数を受け取ります。
ContainerResponseContext インターフェイスは以下のように定義されます。
サンプル実装 リンクのコピーリンクがクリップボードにコピーされました!
ContainerResponse エクステンションポイントのコンテナーレスポンスフィルター (つまり、呼び出しがサーバー側に実行された後にフィルターが実行された場合) を実装するには、ContainerResponseFilter インターフェイスを実装するクラスを定義します。
たとえば、以下のコードは、ContainerResponse エクステンションポイントにインストールされる単純なコンテナーリクエストフィルターの例を示しています。ここで、優先度は 10 になります。
サーバーの応答フィルターのバインド リンクのコピーリンクがクリップボードにコピーされました!
サーバー応答フィルターを バインド する (Apache CXF ランタイムにインストールする) には、以下の手順を実行します。
以下のコードフラグメントで示されるように、
@Providerアノテーションをコンテナーレスポンスフィルタークラスに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーレスポンスフィルター実装が Apache CXF ランタイムにロードされると、REST 実装はロードされたクラスを自動的にスキャンし、
@Providerアノテーション (スキャンフェーズ) の付いたクラスを検索します。XML で JAX-RS サーバーエンドポイントを定義する場合 (例: 「JAX-RS サーバーエンドポイントの設定」)、
jaxrs:providers要素のプロバイダーリストにサーバーレスポンスフィルターを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この手順は、Apache CXF の非標準要件です。厳密に言うと、JAX-RS 標準によれば、フィルターをバインドするために必要なのは
@Providerアノテーションのみです。しかし実際には、標準的なアプローチはやや柔軟性がなく、大規模なプロジェクトに多くのライブラリーが含まれている場合は、プロバイダーの衝突につながる可能性があります。