当前位置: 首页 > 知识库问答 >
问题:

spring云网关禁止未经验证的请求并在http正文中写入错误消息

陆绪
2023-03-14
            // error body is some Object
            exchange.getResponse().setStatusCode(HttpStatus.BAD_REQUEST);
            exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
            String errorBodyStr = objectMapper.writeValueAsString(errorBody);
            byte[] bytes = errorBodyStr.getBytes(StandardCharsets.UTF_8);
            DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(bytes);
            return exchange.getResponse().writeWith(Mono.just(buffer)).and(exchange.getResponse().setComplete());

共有1个答案

慕俊迈
2023-03-14

我不知道为什么,但源代码提供了一个优雅的方法。您可以重写DefaultErrorWebExceptionHandler和DefaultErrorAttributes,并编写您的自定义ErrorAttributes,我已经测试过了!

参见:

org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler#handle

添加:所有GlobalFilters都将被改编成OrderedGatewayFilters。

 类似资料:
  • 我在spring cloud gateway中实现了自定义预过滤器,它允许经过身份验证的请求通过下游流程。我想要的是,如果请求是未经身份验证的,然后返回401未授权状态的响应,并停止下游处理。我可以实现这个Spring云网关。 请帮忙。 和配置如下:

  • 我已经按照这里的建议试过了 但这并没有改变什么。

  • 我使用下面的代码发出http请求,但当抛出异常时,我无法获取每个字段的错误消息。在postman中,它确实显示了正确的错误消息: 它只是显示消息“” 然而,在《邮递员》中,它显示:

  • 每次尝试从数据库中获取用户信息时,我都会收到一个错误。关于我下面的代码,每次我按下Ajax测试按钮尝试请求时,它都无法运行并向我发出警报,但控制台中也会向我发出403禁止的错误。我不确定这是否与Spring security有关? 用户JSP页面: 用户控制器类:

  • 我有一个REST API使用POST调用来创建记录,我希望在POST调用中传递某些对象,如果缺少任何东西,我必须直接拒绝它们的唯一, 但是,当使用丢失的属性进行Post调用时,我可以在MongoDB中创建一个条目,我不想保留它,因为这不是一个正确的请求,@validation对我来说不起作用,我正在使用spring boot 2.0.6和MongoDB 4.0.4,任何帮助都非常感谢。提前感谢

  • 在我的理解中,Spring Cloud Gateway必须实现一个HTTP客户端来发出反向代理请求。Spring框架提供了WebClient。我不知道Spring云网关是否真的在内部使用它。