当从另一个 Mono<Object>> 内部返回时,如何避免破坏 WebFilter 中的请求流?

How can avoid breaking request flow in WebFilter when returning from inside another Mono<Object>>?

这里有一些可笑的代码,例如

@Component
public final class ReCaptchaCheckWebFilter implements WebFilter {
  @Override
  public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
    return Mono.just("foo").map(s -> chain.filter(exchange)).then();
  }
}

有了这个 webfiler,请求永远不会到达我的控制器。它 return 200 http 状态代码。

如果我发现自己需要从另一个 Mono 中 return,我该如何在将请求沿着过滤器链转发到控制器时做到这一点?

chain.filter return 一个单声道,但在您的示例中它不是流的一部分(没有任何内容订阅它)。要解决这个问题,请使用 flatMap 方法

    return Mono.just("foo").flatMap(s -> chain.filter(exchange));