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

时间:2018-09-17 12:16:27

标签: spring-webflux

我想在WebFilter中执行以下操作,以选择绕过后续的过滤器和RestController:

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

我应该怎么做?

谢谢

利昂

1 个答案:

答案 0 :(得分:1)

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

通常的WebFilter在请求/响应上执行某些操作,然后将交换转发到链中的下一个过滤器。但是您也可以单方面处理交换并将其完成。

在此示例中,我们将设置状态代码并调用响应完成。

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();
    }

}