java.lang.Object
com.sun.net.httpserver.Filter
public abstract class Filter extends Object
着信要求の事前処理および事後処理に使用されるフィルタです。 事前処理はアプリケーションの交換ハンドラが呼び出される前に行われ、事後処理は交換ハンドラが返されたあとに行われます。 フィルタはチェーンで編成され、
HttpContext
インスタンスに関連付けられます。
チェーン内の各Filter
は、独自のdoFilter(HttpExchange, Chain)
実装内で次のフィルタを呼び出します。 チェーン内の最後のFilter
がアプリケーション交換ハンドラを呼び出します。
- 導入されたバージョン:
- 1.6
-
ネストされたクラスのサマリー
-
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明static Filter
adaptRequest
(String description, UnaryOperator<Request> requestOperator) リクエスト状態を検査し、場合によっては適応する「前処理フィルタ」を返します。static Filter
afterHandler
(String description, Consumer<HttpExchange> operation) 指定された説明および操作を含む後処理Filter
を返します。static Filter
beforeHandler
(String description, Consumer<HttpExchange> operation) 指定された説明および操作を含む前処理Filter
を返します。abstract String
このFilter
の簡単な説明を返します。abstract void
doFilter
(HttpExchange exchange, Filter.Chain chain) このフィルタに対し、指定された交換の事前処理または事後処理を要求します。
-
コンストラクタの詳細
-
Filter
protected Filter()サブクラスが呼び出すためのコンストラクタ。
-
-
メソッドの詳細
-
doFilter
public abstract void doFilter(HttpExchange exchange, Filter.Chain chain) throws IOException このフィルタに対し、指定された交換の事前処理または事後処理を要求します。 フィルタは次のことができます:- リクエスト・ヘッダーを調査または変更します。
- 適切なフィルタ・ストリームを作成し、
HttpExchange.setStreams(InputStream, OutputStream)
をコールして、リクエスト本文またはレスポンス本文をフィルタします。 - 他のフィルタまたは交換ハンドラがアクセスできる、交換の属性オブジェクトを設定します。
- 次のいずれかを決定します:
-
Filter.Chain.doFilter(HttpExchange)
をコールして、チェーンの次のフィルタを起動します。 -
Filter.Chain.doFilter(HttpExchange)
をコールしないで、呼出しのチェーンを終了します。
-
- 前述のオプション1.が使用されている場合、doFilter()がチェーン内の後続のすべてのフィルタを返したときに、レスポンス・ヘッダーを調査または変更できます。
- 前述のオプション2.を使用する場合、このフィルタはHttpExchangeを使用して適切なレスポンスを送り返す必要があります。
- パラメータ:
exchange
- フィルタ処理されるHttpExchange
chain
- 次のフィルタの呼出しを可能にするChain
- 例外:
IOException
- どのフィルタ・モジュールでもスローされる可能性があり、キャッチされた場合、再度スローする必要があるNullPointerException
- 交換とチェーンのいずれかがnull
の場合
-
description
public abstract String description()このFilter
の簡単な説明を返します。- 戻り値:
Filter
を記述するString
-
beforeHandler
public static Filter beforeHandler(String description, Consumer<HttpExchange> operation) 指定された説明および操作を含む前処理Filter
を返します。operation
は、フィルタの効果的な実装です。 チェーン内の次のフィルタまたは交換ハンドラ(これがチェーンの最終フィルタである場合)を呼び出す前に、各HttpExchange
に対して実行されます。operation
によってスローされた例外は、フィルタによって処理されません。- APIのノート:
- beforeHandlerフィルタは通常、交換状態が処理される前に調査または変更するために使用されます。 フィルタ
operation
は、Filter.Chain.doFilter(HttpExchange)
が起動される前に実行されるため、チェーン内の後続のフィルタと交換ハンドラが実行されます。 フィルタoperation
は、通常、これは交換ハンドラによって行われるため、リクエストまたは「レスポンス・ヘッダーの送信」を処理する必要はありません。すべてのレスポンスに
"Foo"
レスポンス・ヘッダーを追加する例:var filter = Filter.beforeHandler("Add response header Foo", e -> e.getResponseHeaders().set("Foo", "Bar")); httpContext.getFilters().add(filter);
- パラメータ:
description
-description()
から返される文字列operation
- 返されたフィルタの操作- 戻り値:
- 交換の処理前に操作が呼び出されるフィルタ
- 例外:
NullPointerException
- いずれかの引数がnullの場合- 導入されたバージョン:
- 17
-
afterHandler
public static Filter afterHandler(String description, Consumer<HttpExchange> operation) 指定された説明および操作を含む後処理Filter
を返します。operation
は、フィルタの効果的な実装です。 チェーン内の次のフィルタまたは交換ハンドラ(このフィルタがチェーンの最終フィルタである場合)を呼び出した後に、各HttpExchange
に対して実行されます。operation
によってスローされた例外は、フィルタによって処理されません。- APIのノート:
- afterHandlerフィルタは、通常、交換状態を変更するのではなく調査するために使用されます。 フィルタ
operation
は、Filter.Chain.doFilter(HttpExchange)
の起動後に実行されます。つまり、チェーン内の後続のフィルタおよび交換ハンドラが実行されたことを意味します。 フィルタoperation
は、交換または「レスポンス・ヘッダーの送信」を処理するものではありません。 これを行うと、operation
が起動される前に交換が通常処理されるため、失敗する可能性があります。 具体的には、フィルタoperation
を実行する前にレスポンスを送信できます。すべての交換のレスポンス・コードを記録するフィルタの追加例:
var filter = Filter.afterHandler("Log response code", e -> log(e.getResponseCode()); httpContext.getFilters().add(filter);
コンテキストに一連のafterHandlerフィルタを追加する例:
フィルタ操作が呼び出される順序は、フィルタがコンテキスト・フィルタ・リストに追加される順序と逆です。var a1Set = Filter.afterHandler("Set a1", e -> e.setAttribute("a1", "some value")); var a1Get = Filter.afterHandler("Get a1", e -> doSomething(e.getAttribute("a1"))); httpContext.getFilters().addAll(List.of(a1Get, a1Set));
a1Get
はa1Set
の前に追加されているため、a1Get
の操作はa1Set
の操作後に呼び出されます。 - パラメータ:
description
-description()
から返される文字列operation
- 返されたフィルタの操作- 戻り値:
- 交換の処理後に操作が呼び出されるフィルタ
- 例外:
NullPointerException
- いずれかの引数がnullの場合- 導入されたバージョン:
- 17
-
adaptRequest
public static Filter adaptRequest(String description, UnaryOperator<Request> requestOperator) リクエスト状態を検査し、場合によっては適応する「前処理フィルタ」を返します。requestOperator
によって返されるRequest
は、交換の有効なリクエスト状態になります。 チェーン内の次のフィルタまたは交換ハンドラ(これがチェーンの最終フィルタである場合)を呼び出す前に、各HttpExchange
に対して実行されます。requestOperator
によってスローされた例外は、フィルタによって処理されません。- APIのノート:
- 戻されたフィルタが起動されると、「適応リクエスト状態」を取得するために、まず指定された交換
ex
を使用してrequestOperator
を起動します。 次に、チェーンまたは交換ハンドラで次のフィルタを起動し、「適応リクエスト状態」を有効なリクエスト状態として設定してex
と同等の交換を渡します。"Foo"
リクエスト・ヘッダーをすべてのリクエストに追加する例:var filter = Filter.adaptRequest("Add Foo header", r -> r.with("Foo", List.of("Bar"))); httpContext.getFilters().add(filter);
- パラメータ:
description
-description()
から返される文字列requestOperator
- リクエスト・オペレータ- 戻り値:
- 交換が処理される前にリクエスト状態に適応するフィルタ
- 例外:
NullPointerException
- いずれかの引数がnullの場合- 導入されたバージョン:
- 18
-