首页 > 解决方案 > Spring weflux,停止过滤器链并从当前过滤器返回 BAD REQUEST

问题描述

在spring webflux中,如何停止过滤器链并从当前过滤器返回BAD_REQUEST?

public class AuthorizationFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {

        return chain.filter(Optional.of(exchange)
                .filter(serverWebExchange -> serverWebExchange.getRequest().getURI().getPath().endsWith("/authorize"))
                .orElse(//RETRUN BADREQUEST here));
    }

标签: springspring-webflux

解决方案


您可以处理路径并设置响应代码:

@Component
public class AuthorizationFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {

        List<String> allowedPaths = new ArrayList<>();
    allowedPaths.add("/authorize");

        if (allowedPaths.contains(exchange.getRequest().getPath().toString())) {
            return chain.filter(exchange);
        } else {
            exchange.getResponse().setStatusCode(HttpStatus.BAD_REQUEST);
            return exchange.getResponse().setComplete();
        }
    }
}

推荐阅读