Browse Source

Support spring.codec.max-in-memory-size configuration for CacheRequestBodyFilter

Fixes gh-2693
Fixes gh-2797
pull/3126/head
Gaurav Ojha 2 years ago committed by sgibb
parent
commit
7dff7319a6
No known key found for this signature in database
GPG Key ID: 7788A47380690861
  1. 5
      spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java
  2. 5
      spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/CacheRequestBodyGatewayFilterFactory.java
  3. 14
      spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/CacheRequestBodyGatewayFilterFactoryTests.java

5
spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java

@ -549,8 +549,9 @@ public class GatewayAutoConfiguration { @@ -549,8 +549,9 @@ public class GatewayAutoConfiguration {
@Bean
@ConditionalOnEnabledFilter
public CacheRequestBodyGatewayFilterFactory cacheRequestBodyGatewayFilterFactory() {
return new CacheRequestBodyGatewayFilterFactory();
public CacheRequestBodyGatewayFilterFactory cacheRequestBodyGatewayFilterFactory(
ServerCodecConfigurer codecConfigurer) {
return new CacheRequestBodyGatewayFilterFactory(codecConfigurer.getReaders());
}
@Bean

5
spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/CacheRequestBodyGatewayFilterFactory.java

@ -51,6 +51,11 @@ public class CacheRequestBodyGatewayFilterFactory @@ -51,6 +51,11 @@ public class CacheRequestBodyGatewayFilterFactory
this.messageReaders = HandlerStrategies.withDefaults().messageReaders();
}
public CacheRequestBodyGatewayFilterFactory(List<HttpMessageReader<?>> messageReaders) {
super(CacheRequestBodyGatewayFilterFactory.Config.class);
this.messageReaders = messageReaders;
}
@Override
public GatewayFilter apply(CacheRequestBodyGatewayFilterFactory.Config config) {
return new GatewayFilter() {

14
spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/CacheRequestBodyGatewayFilterFactoryTests.java

@ -34,7 +34,9 @@ import org.springframework.cloud.gateway.test.BaseWebClientTests; @@ -34,7 +34,9 @@ import org.springframework.cloud.gateway.test.BaseWebClientTests;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.core.io.buffer.PooledDataBuffer;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.util.StringUtils;
import org.springframework.web.server.ServerWebExchange;
@ -43,7 +45,7 @@ import static org.assertj.core.api.Assertions.assertThat; @@ -43,7 +45,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
@SpringBootTest(webEnvironment = RANDOM_PORT)
@SpringBootTest(webEnvironment = RANDOM_PORT, properties = "spring.codec.max-in-memory-size=25")
@DirtiesContext
public class CacheRequestBodyGatewayFilterFactoryTests extends BaseWebClientTests {
@ -53,6 +55,8 @@ public class CacheRequestBodyGatewayFilterFactoryTests extends BaseWebClientTest @@ -53,6 +55,8 @@ public class CacheRequestBodyGatewayFilterFactoryTests extends BaseWebClientTest
private static final String BODY_CACHED_EXISTS = "BODY_CACHED_EXISTS";
private static final String LARGE_BODY_VALUE = "here is request body which will cause payload size failure";
@Test
public void cacheRequestBodyWorks() {
testClient.post().uri("/post").header("Host", "www.cacherequestbody.org").bodyValue(BODY_VALUE).exchange()
@ -65,6 +69,14 @@ public class CacheRequestBodyGatewayFilterFactoryTests extends BaseWebClientTest @@ -65,6 +69,14 @@ public class CacheRequestBodyGatewayFilterFactoryTests extends BaseWebClientTest
});
}
@Test
public void cacheRequestBodyDoesntWorkForLargePayload() {
testClient.post().uri("/post").header("Host", "www.cacherequestbody.org")
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).bodyValue(LARGE_BODY_VALUE)
.exchange().expectStatus().isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR).expectBody().jsonPath("message")
.isEqualTo("Exceeded limit on max bytes to buffer : 25");
}
@Test
public void cacheRequestBodyEmpty() {
testClient.post().uri("/post").header("Host", "www.cacherequestbodyempty.org").exchange().expectStatus().isOk()

Loading…
Cancel
Save