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