在 Spring Cloud Gateway 过滤器中抛出自定义运行时异常

San*_*osh 6 spring spring-cloud-gateway

我们将 Spring Cloud Gateway 与 Spring Boot 2 和反应式 WebFlux 模块结合使用。

为其中一条路由添加了一个身份验证过滤器。现在,如果我们抛出一个带有特定状态代码的 RuntimeException,它实际上不会被接收。

早些时候,这种身份验证检查是 Spring 中 HandlerInterceptor 的一部分,但现在我们不能将 Web 模块与 WebFlux 一起使用(与 Spring 云网关冲突)。

例子:

@Override
public GatewayFilter apply(Object config) {
   ServerHttpRequest httpRequest = exchange.getRequest();
   if(!someUtil.validRequest(httpRequest) {
          throw new RuntimeException("Throw 401 Unauthorized with Custom error code and message");
   }
}
Run Code Online (Sandbox Code Playgroud)

目前,实际响应总是给出500 内部服务器错误。这是从哪里来的?我们可以在这里找到过滤器的错误吗?

ste*_*ong 2

您可以实现自定义错误处理程序,这里是Spring Boot 文档

或者您可以简单地抛出 ResponseStatusException。默认错误处理程序将呈现特定状态。