gateway改写json参数报错

来源:10-3 编写Spring Cloud Gateway

慕雪7517967

2020-09-04

这是报错信息:

org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
	at org.springframework.core.io.buffer.LimitedDataBufferList.raiseLimitException(LimitedDataBufferList.java:101)
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
	|_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
	|_ checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
	|_ checkpoint ⇢ HTTP POST "/" [ExceptionHandlingWebHandler]
Stack trace:

求大佬帮解答伊西哎

写回答

1回答

大目

2020-09-04

您好:

先说解决方案:

  1. 删除你代码中的com.example.gateway.filter.WebFluxWebConfig ,因为没什么用

  2. 修改你的AuthFilter,找到

private Mono<Void> readBodyAndModify(ServerWebExchange exchange, GatewayFilterChain chain, Integer bussinessId) {
    log.info("read json 1");
    ServerRequest serverRequest = ServerRequest.create(exchange, HandlerStrategies.withDefaults().messageReaders());

修改为:

@Autowired
private ServerCodecConfigurer codecConfigurer;

private Mono<Void> readBodyAndModify(ServerWebExchange exchange, GatewayFilterChain chain, Integer bussinessId) {
    log.info("read json 1");
    ServerRequest serverRequest = ServerRequest.create(exchange, codecConfigurer.getReaders());

3. 保留如下配置:

spring:
  codec:
    max-in-memory-size: 10MB


定位问题的过程:

  1. 初期我也很懵逼,因为这个问题百度一堆解决方案。我没有考虑是你的AuthFilter的代码问题,然后发现确实不管添加配置,还是自己写WebFluxWebConfig都无法解决问题。

  2. 于是我心想,难道是Spring Cloud Gateway的bug?然后找到了这个Pull Request,其实答案已经呼之欲出了,但由于我没有往你自己的AuthFilter方向考虑问题,所以稍微走了点弯路——我看到这个PR已经被合并了,Hoxton SR5已经解决了问题。

  3. 于是我心想,应该还是你的代码问题。然后我发现你的AuthFilter只要不初始化就没有问题,你甚至还写了一堆日志去定位。于是我就参照了https://github.com/spring-cloud/spring-cloud-gateway/issues/1658#issuecomment-678023793 这里的描述 ,解决了问题。


1
1
慕雪7517967
你真的是太赞了
2020-09-04
共1条回复

Spring Cloud Alibaba微服务从入门到进阶

面向未来微服务:熟练掌握Spring Cloud Alibaba

3054 学习 · 1322 问题

查看课程