2.5. Client 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()
ํํฐ๋ ๋ชจ๋ ์์ฒญ์ ์ ์ญ์ผ๋ก ์ ์ฉ๋๋ค. ํน์ ์์ฒญ์ ๋ํ ํํฐ ๋์์ ๋ณ๊ฒฝํ๋ ค๋ฉด, ClientRequest์ request ์์ฑ์ ์ถ๊ฐํ๊ณ , ํํฐ ์ฒด์ธ์์
์ด ์์ฑ์ ์ ๊ทผํ๋ฉด ๋๋ค. ๋ค์์ ๊ทธ ์์ ๋ค:
Java:
WebClient client = WebClient.builder()
.filter((request, next) -> {
Optional<Object> usr = request.attribute("myAttribute");
// ...
})
.build();
client.get().uri("https://example.org/")
.attribute("myAttribute", "...")
.retrieve()
.bodyToMono(Void.class);
}
Kotlin:
val client = WebClient.builder()
.filter { request, _ ->
val usr = request.attributes()["myAttribute"];
// ...
}.build()
client.get().uri("https://example.org/")
.attribute("myAttribute", "...")
.retrieve()
.awaitBody<Unit>()
๊ธฐ์กด์ 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()
๋ชฉ์ฐจ ๊ฐ์ด๋