Spring Web Reactive | 2. WebClient | 2.5. Filters

次の例のように、WebClient.Builderを通じてクライアントフィルター(ExchangeFilterFunction)を登録し、リクエストをインターセプトして変更できます。

Java

WebClient client = WebClient.builder()
        .filter((request, next) -> {

            ClientRequest filtered = ClientRequest.from(request)
                    .header("foo", "bar")
                    .build();

            return next.exchange(filtered);
        })
        .build();

Kotlin

val client = WebClient.builder()
        .filter { request, next ->

            val filtered = ClientRequest.from(request)
                    .header("foo", "bar")
                    .build()

            next.exchange(filtered)
        }
        .build()

フィルターは、認証などの横断的関心事に使用できます。次の例では、静的ファクトリーメソッドによる基本認証フィルターを使用します。

Java

import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication;

WebClient client = WebClient.builder()
        .filter(basicAuthentication("user", "password"))
        .build();

Kotlin

import org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication

val client = WebClient.builder()
        .filter(basicAuthentication("user", "password"))
        .build()

別のインスタンスを起点に、新しいWebClientインスタンスを作成できます。元のWebClientに影響を与えず、フィルターを追加または削除できます。次の例では、インデックス0に基本認証フィルターを追加します。

Java

import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication;

WebClient client = webClient.mutate()
        .filters(filterList -> {
            filterList.add(0, basicAuthentication("user", "password"));
        })
        .build();

Kotlin

val client = webClient.mutate()
        .filters { it.add(0, basicAuthentication("user", "password")) }
        .build()