fix limit on max bytes to buffer : 262144

max-bytes-262144
tanghc 4 years ago
parent ede2e37d3c
commit 3421daa1e3
  1. 12
      sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/gateway/ServerWebExchangeUtil.java
  2. 6
      sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/gateway/filter/IndexFilter.java

@ -18,6 +18,7 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.codec.HttpMessageReader; import org.springframework.http.codec.HttpMessageReader;
import org.springframework.http.codec.ServerCodecConfigurer;
import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
@ -78,6 +79,17 @@ public class ServerWebExchangeUtil {
return ServerRequest.create(exchange, messageReaders); return ServerRequest.create(exchange, messageReaders);
} }
/**
* 构建一个接受请求体的request
*
* @param exchange exchange
* @param codecConfigurer codecConfigurer
* @return 返回ServerRequest
*/
public static ServerRequest createReadBodyRequest(ServerWebExchange exchange, ServerCodecConfigurer codecConfigurer) {
return ServerRequest.create(exchange, codecConfigurer.getReaders());
}
public static ApiParam getApiParamForRestful(ServerWebExchange exchange, String path) { public static ApiParam getApiParamForRestful(ServerWebExchange exchange, String path) {
int index = path.indexOf(REST_PATH); int index = path.indexOf(REST_PATH);
// 取"/rest"的后面部分 // 取"/rest"的后面部分

@ -20,6 +20,7 @@ import org.springframework.core.annotation.Order;
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.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.http.codec.ServerCodecConfigurer;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpRequestDecorator; import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
import org.springframework.web.reactive.function.BodyInserter; import org.springframework.web.reactive.function.BodyInserter;
@ -61,6 +62,9 @@ public class IndexFilter implements WebFilter {
@Autowired @Autowired
private GatewayForwardChooser gatewayForwardChooser; private GatewayForwardChooser gatewayForwardChooser;
@Autowired
private ServerCodecConfigurer codecConfigurer;
@Override @Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
ServerHttpRequest request = exchange.getRequest(); ServerHttpRequest request = exchange.getRequest();
@ -84,7 +88,7 @@ public class IndexFilter implements WebFilter {
} }
if (Objects.equals(path, indexPath)) { if (Objects.equals(path, indexPath)) {
if (request.getMethod() == HttpMethod.POST) { if (request.getMethod() == HttpMethod.POST) {
ServerRequest serverRequest = ServerWebExchangeUtil.createReadBodyRequest(exchange); ServerRequest serverRequest = ServerWebExchangeUtil.createReadBodyRequest(exchange, codecConfigurer);
// 读取请求体中的内容 // 读取请求体中的内容
Mono<?> modifiedBody = serverRequest.bodyToMono(byte[].class) Mono<?> modifiedBody = serverRequest.bodyToMono(byte[].class)
.flatMap(data -> { .flatMap(data -> {

Loading…
Cancel
Save