You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring WebClient过滤器与请求头设置的调用顺序咨询

WebClient请求头与过滤器的执行顺序

结论

先通过.header("Authorization","jwttoken2")设置请求头,之后过滤器会将其覆盖为"JWT1...."。

详细说明

Spring WebClient的请求构建与过滤器执行遵循以下逻辑:

  1. 调用webClient.get().uri(someuri).header(...)这类方法时,是在构建请求的基础配置,此时手动设置的Authorization: jwttoken2和x-app-name: appname会被加入请求头的初始集合。
  2. 当调用retrieve().bodyToMono(Someclass)并触发订阅(比如调用.block()或在响应式流中被订阅)时,WebClient才会真正处理请求,此时会依次执行配置的ExchangeFilterFunction过滤器链。
  3. 你的过滤器会在这个阶段对已构建好的请求对象进行修改,若过滤器中通过request.headers().set("Authorization", "JWT1....")这类方式设置头,就会覆盖之前手动设置的jwttoken2值。

验证示例

如果想直观确认顺序,可以在过滤器中打印请求头的当前值:

ExchangeFilterFunction jwtFilter = ExchangeFilterFunction.ofRequestProcessor(request -> {
    // 打印手动设置的Authorization头
    System.out.println("过滤器执行前的Authorization头:" + request.headers().getFirst("Authorization"));
    // 设置新的Authorization头
    ClientRequest modifiedRequest = ClientRequest.from(request)
            .header("Authorization", "JWT1....")
            .build();
    return Mono.just(modifiedRequest);
});

运行后控制台会输出过滤器执行前的Authorization头:jwttoken2,证明手动设置的头先存在,之后被过滤器覆盖。

内容的提问来源于stack exchange,提问作者Loner shushman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:44:57