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()

이것은 인증 등의 횡단적 관심사( cross-cutting concerns)에 사용할 수 있다. 다음 예제에서는 정적 팩토리 방식을 통한 기본 인증 필터를 사용하고 있다.

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()



최종 수정 : 2021-04-12