Реактивный способ запроса прокси в Spring webflux - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть требование, по которому я должен перенаправить запрос на другую конечную точку, добавив несколько дополнительных заголовков (обычно токены OAuth).

Я попробовал ниже обработать один для запроса прокси.

 fun proxy(request: ServerRequest, url:String, customHeaders: HttpHeaders = HttpHeaders.EMPTY): Mono<ServerResponse> {

        val modifiedHeaders = getHeadersWithoutOrigin(request, customHeaders)

        var webClient = clientBuilder.method(request.method()!!)
                .uri(url)
        modifiedHeaders.forEach{
            val list = it.value.iterator().asSequence().toList()
            val ar:Array<String> = list.toTypedArray()
            webClient.header(it.key, *ar)
        }
        return webClient
                .body(request.bodyToMono(), DataBuffer::class.java).exchange()
                .flatMap { clientResponse ->
                    ServerResponse.status(clientResponse.statusCode())
                            .headers{
                                it.addAll(clientResponse.headers().asHttpHeaders())
                            }
                            .body(clientResponse.bodyToMono(), DataBuffer::class.java)
                }
    }

Входящие запросы всегда попадают в одну конечную точку прокси на моем сервере с целевым URL в заголовке. На сервере я читаю целевой URL, добавляю токены OAuth и пересылаю запрос на целевой URL. В этом случае я не хочу анализировать тело ответа. Отправьте ответ в нисходящем направлении.

Как реагировать на это?

...