|
|
@ -2,10 +2,10 @@ package com.gitee.sop.gatewaycommon.gateway.filter; |
|
|
|
|
|
|
|
|
|
|
|
import com.gitee.sop.gatewaycommon.bean.ApiContext; |
|
|
|
import com.gitee.sop.gatewaycommon.bean.ApiContext; |
|
|
|
import com.gitee.sop.gatewaycommon.bean.SopConstants; |
|
|
|
import com.gitee.sop.gatewaycommon.bean.SopConstants; |
|
|
|
|
|
|
|
import com.gitee.sop.gatewaycommon.gateway.codec.MessageReaderFactory; |
|
|
|
import com.gitee.sop.gatewaycommon.result.ResultExecutor; |
|
|
|
import com.gitee.sop.gatewaycommon.result.ResultExecutor; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.reactivestreams.Publisher; |
|
|
|
import org.reactivestreams.Publisher; |
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
|
|
|
|
|
import org.springframework.cloud.gateway.filter.GatewayFilterChain; |
|
|
|
import org.springframework.cloud.gateway.filter.GatewayFilterChain; |
|
|
|
import org.springframework.cloud.gateway.filter.GlobalFilter; |
|
|
|
import org.springframework.cloud.gateway.filter.GlobalFilter; |
|
|
|
import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter; |
|
|
|
import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter; |
|
|
@ -13,16 +13,12 @@ import org.springframework.cloud.gateway.filter.factory.rewrite.CachedBodyOutput |
|
|
|
import org.springframework.cloud.gateway.support.BodyInserterContext; |
|
|
|
import org.springframework.cloud.gateway.support.BodyInserterContext; |
|
|
|
import org.springframework.cloud.gateway.support.DefaultClientResponse; |
|
|
|
import org.springframework.cloud.gateway.support.DefaultClientResponse; |
|
|
|
import org.springframework.core.Ordered; |
|
|
|
import org.springframework.core.Ordered; |
|
|
|
import org.springframework.core.codec.AbstractDataBufferDecoder; |
|
|
|
|
|
|
|
import org.springframework.core.codec.Decoder; |
|
|
|
|
|
|
|
import org.springframework.core.io.buffer.DataBuffer; |
|
|
|
import org.springframework.core.io.buffer.DataBuffer; |
|
|
|
import org.springframework.http.HttpHeaders; |
|
|
|
import org.springframework.http.HttpHeaders; |
|
|
|
import org.springframework.http.HttpStatus; |
|
|
|
import org.springframework.http.HttpStatus; |
|
|
|
import org.springframework.http.MediaType; |
|
|
|
import org.springframework.http.MediaType; |
|
|
|
import org.springframework.http.ResponseCookie; |
|
|
|
import org.springframework.http.ResponseCookie; |
|
|
|
import org.springframework.http.client.reactive.ClientHttpResponse; |
|
|
|
import org.springframework.http.client.reactive.ClientHttpResponse; |
|
|
|
import org.springframework.http.codec.DecoderHttpMessageReader; |
|
|
|
|
|
|
|
import org.springframework.http.codec.HttpMessageReader; |
|
|
|
|
|
|
|
import org.springframework.http.server.reactive.ServerHttpResponseDecorator; |
|
|
|
import org.springframework.http.server.reactive.ServerHttpResponseDecorator; |
|
|
|
import org.springframework.util.MultiValueMap; |
|
|
|
import org.springframework.util.MultiValueMap; |
|
|
|
import org.springframework.web.reactive.function.BodyInserter; |
|
|
|
import org.springframework.web.reactive.function.BodyInserter; |
|
|
@ -40,9 +36,6 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.O |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public class GatewayModifyResponseGatewayFilter implements GlobalFilter, Ordered { |
|
|
|
public class GatewayModifyResponseGatewayFilter implements GlobalFilter, Ordered { |
|
|
|
|
|
|
|
|
|
|
|
@Value("${spring.codec.max-in-memory-size:262144}") |
|
|
|
|
|
|
|
private int maxInMemorySize; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { |
|
|
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { |
|
|
@ -107,16 +100,7 @@ public class GatewayModifyResponseGatewayFilter implements GlobalFilter, Ordered |
|
|
|
private ExchangeStrategies getExchangeStrategies() { |
|
|
|
private ExchangeStrategies getExchangeStrategies() { |
|
|
|
ExchangeStrategies exchangeStrategies = ExchangeStrategies.withDefaults(); |
|
|
|
ExchangeStrategies exchangeStrategies = ExchangeStrategies.withDefaults(); |
|
|
|
// 修复返回大文本数据报org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
|
|
|
|
// 修复返回大文本数据报org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
|
|
|
|
for (HttpMessageReader<?> messageReader : exchangeStrategies.messageReaders()) { |
|
|
|
MessageReaderFactory.initMaxInMemorySize(exchangeStrategies); |
|
|
|
if (messageReader instanceof DecoderHttpMessageReader) { |
|
|
|
|
|
|
|
DecoderHttpMessageReader reader = (DecoderHttpMessageReader) messageReader; |
|
|
|
|
|
|
|
Decoder decoder = reader.getDecoder(); |
|
|
|
|
|
|
|
if (decoder instanceof AbstractDataBufferDecoder) { |
|
|
|
|
|
|
|
AbstractDataBufferDecoder dataBufferDecoder = (AbstractDataBufferDecoder)decoder; |
|
|
|
|
|
|
|
dataBufferDecoder.setMaxInMemorySize(maxInMemorySize); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return exchangeStrategies; |
|
|
|
return exchangeStrategies; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|