首页 > 解决方案 > 通过 WebFlux 中的过滤器向传出请求添加标头

问题描述

我正在为客户端和服务器使用 Java Spring WebFlux,并且我想通过向其添加自定义标头来自定义从客户端到服务器的请求。我已经将 WebFilter 用于另一个目的,但它似乎只适用于传入的请求和响应(例如来自 FE 的请求和对它的响应)。

标签: javaspringspring-webflux

解决方案


有多种方法可以指定自定义标题。

如果标头是静态的,您可以在WebClient实例创建期间使用defaultHeaderordefaultHeaders方法指定它们:

WebClient.builder().defaultHeader("headerName", "headerValue")
WebClient.builder().defaultHeaders(headers -> headers.add("h1", "hv1").add("h2", "hv2"))

如果标头是动态的,但所有请求的标头值生成都是通用的,则可以在实例创建ExchangeFilterFunction.ofRequestProcessor期间使用配置:WebClient

WebClient
    .builder()
    .filter(ExchangeFilterFunction.ofRequestProcessor(
        request -> Mono.just(ClientRequest.from(request)
                                          .header("X-HEADER-NAME", "value")
                                          .build())
    )
    .build();

如果每次使用时标头都是动态且特定的WebClient,则可以为每次调用配置标头:

webClient.get()
    .header("headerName", getHeaderValue(params))
    .retrieve();

推荐阅读