Spring WebClient过滤器与请求头设置的调用顺序咨询
WebClient请求头与过滤器的执行顺序
结论
先通过.header("Authorization","jwttoken2")设置请求头,之后过滤器会将其覆盖为"JWT1...."。
详细说明
Spring WebClient的请求构建与过滤器执行遵循以下逻辑:
- 调用
webClient.get().uri(someuri).header(...)这类方法时,是在构建请求的基础配置,此时手动设置的Authorization: jwttoken2和x-app-name: appname会被加入请求头的初始集合。 - 当调用
retrieve().bodyToMono(Someclass)并触发订阅(比如调用.block()或在响应式流中被订阅)时,WebClient才会真正处理请求,此时会依次执行配置的ExchangeFilterFunction过滤器链。 - 你的过滤器会在这个阶段对已构建好的请求对象进行修改,若过滤器中通过
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
相关产品推荐
相关产品推荐

