为了账号安全,请及时绑定邮箱和手机立即绑定

Spring WebFlux - WebFilter 中的 statusCode 为 null

Spring WebFlux - WebFilter 中的 statusCode 为 null

holdtom 2021-10-28 15:28:36
目前正在使用 Spring Boot 2.0.4 开发一个 WebFilter,它在 Spring WebFlux 应用程序中记录 HTTP 请求和响应信息(URL、响应状态代码、持续时间等)。工作正常,除了exchange.getResponse().getStatusCode() 保持为 null。尝试了两种不同的过滤器实现(ServerWebExchange exchange, WebFilterChain chain),第一个:return chain.filter(exchange).doAfterTerminate(        () -> System.out.println("Status=" + exchange.getResponse().getStatusCode()));第二个:    Mono<Void> filtered = chain.filter(exchange);    exchange.getResponse().beforeCommit(() -> {        System.out.println("Status=" + exchange.getResponse().getStatusCode());        return Mono.empty();    });    return filtered;还尝试了过滤器上的各种命令:none、@Order(100000)、@Order(-100000)。状态代码保持为空。什么是正确的实施?更新 1写了一个基于 KevH 解决方案的简约工作示例,请参阅https://github.com/fbeaufume/webflux-filter-sample但它尚未工作,状态仍然为空。MWE 公开了两个 REST 端点:/hello 和 /pause/1000(暂停 1 秒)。请注意,当调用暂停端点日志时:11:06:20.644  INFO 9536 --- [ctor-http-nio-2] com.adeliosys.sample.LogFilter           : Request [/pause/1000] started, traceId [bb3fe67d-170b-4070-837d-816fe1420a1f]11:06:20.673  INFO 9536 --- [ctor-http-nio-2] com.adeliosys.sample.HelloController     : Pausing for 1000 msec11:06:21.683  INFO 9536 --- [     parallel-2] com.adeliosys.sample.LogFilter           : Request [/pause/1000] completed, statusCode [null], time [1039], traceId [bb3fe67d-170b-4070-837d-816fe1420a1f]11:06:21.684  INFO 9536 --- [     parallel-2] com.adeliosys.sample.HelloController     : Paused for 1000 msec我很惊讶过滤器的第二条消息显示在端点的第二条消息之前。更新 2似乎使用 doAfterTerminate(或类似方法)的过滤器实现是正确的,但这仅使用在返回类型中使用ResponseEntity 的REST 控制器方法才能正确检索 HTTP 响应状态。不支持(即状态为空): ,void,Mono<Void>,String,Mono<String>,MyBean,Mono<MyBean>等。支持(即状态为200): , ,ReponseEntity<Void>,Mono<ResponseEntity<Void>>,,ReponseEntity<String> ,等。Mono<ResponseEntity<String>>ReponseEntity<MyBean>Mono<ResponseEntity<MyBean>>漏洞?Spring Boot 2.0.5 具有相同的行为。更新 3在这个主题上开了一个问题,见https://jira.spring.io/browse/SPR-17368
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 244 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信