Я хочу реализовать WebFilter, который считывает указанный c заголовок входящего запроса, вызывает запрос GET к другой реактивной конечной точке REST со значением этого заголовка, а затем изменяет исходный запрос на значение ответа GET. .
Я хочу реализовать это в WebFilter, потому что я не хочу добавлять этот вызов функции к каждой функции в моем @RestController
.
В настоящее время у меня есть это:
@Component
class ExampleWebFilter(val webClients: WebClients) : WebFilter {
override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
println(exchange.request.headers)
println(exchange.request.path)
println(exchange.response)
val test = webClients.internalAuthServiceClient.get()
.uri("/api/authorisation/v1/test")
.header("authToken", "authToken123")
.retrieve().bodyToMono(String::class.java)
println(test)
exchange.mutate().request(
exchange.request.mutate().header("newheader", test).build()
)
return chain.filter(exchange)
}
}
@Component
class WebClients() {
val internalAuthServiceClient = WebClient.builder()
.baseUrl("lb://auth-service")
.build()
}
Сейчас это явно не работает. Мой WebClient возвращает Mono, поэтому я не могу использовать это непосредственно в моем вызове mutate()
, потому что для этого требуется строка. Я также не могу заставить WebClient вызывать операцию блокировки по понятным причинам.
Кто-нибудь знает, как я мог решить эту проблему?