代码之家  ›  专栏  ›  技术社区  ›  anuni

WebFlux:如何用提供的响应中止WebFilter中的请求处理

  •  1
  • anuni  · 技术社区  · 7 年前

    我想在我的WebFilter中执行如下操作,可以选择绕过后续的过滤器和rest控制器:

    if(shouldRedirect(exchange)){
      //do redirect
    }else if(!canAccess(exchange)){
      //return a 403 response
    }else{
      chain.filter(exchange);
    }
    

    谢谢

    1 回复  |  直到 7 年前
        1
  •  6
  •   Brian Clozel    7 年前

    从技术上讲,合同规定过滤器必须返回 Mono<Void> ,在处理交换(请求+响应)时完成。

    照常 WebFilter 对请求/响应执行某些操作,然后将交换转发到链中的下一个筛选器。但你也可以单方处理交换,并称之为完成。

    在这个示例中,我们设置状态代码并调用response done。

    class MyFilter implements WebFilter {
    
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
            ServerHttpResponse response = exchange.getResponse();
            response.setStatusCode(HttpStatus.NOT_FOUND);
            return response.setComplete();
        }
    
    }