diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactory.java index 7e5bca6f..8c3c80f3 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactory.java @@ -16,6 +16,7 @@ package org.springframework.cloud.gateway.filter.factory; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -50,6 +51,11 @@ public class RequestHeaderSizeGatewayFilterFactory super(RequestHeaderSizeGatewayFilterFactory.Config.class); } + @Override + public List shortcutFieldOrder() { + return Collections.singletonList("maxSize"); + } + @Override public GatewayFilter apply(RequestHeaderSizeGatewayFilterFactory.Config config) { return new GatewayFilter() { @@ -62,7 +68,7 @@ public class RequestHeaderSizeGatewayFilterFactory for (Map.Entry> headerEntry : headers.entrySet()) { List values = headerEntry.getValue(); for (String value : values) { - headerSizeInBytes += Long.valueOf(value.getBytes().length); + headerSizeInBytes += (long) value.getBytes().length; } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactoryTest.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactoryTest.java index 2cc9e0e3..0d281fa6 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactoryTest.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactoryTest.java @@ -52,11 +52,20 @@ public class RequestHeaderSizeGatewayFilterFactoryTest extends BaseWebClientTest + "permissible limit. Request Header/s size is \\d*B where permissible limit is \\d*B"; @Test - public void setRequestSizeFilterWorks() { - testClient.get().uri("/headers").header("Host", "www.test.org") - .header("HeaderName", "Some Very Large Header Name").exchange().expectStatus() - .isEqualTo(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE).expectHeader() - .valueMatches("errorMessage", responseMesssage); + public void setRequestHeaderSizeFilterWorks() { + testClient.get().uri("/headers") + .header("Host", "www.testrequestheadersizefilter.org") + .header("HeaderName", "Some Very Large Header Name").exchange() + .expectStatus().isEqualTo(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE) + .expectHeader().valueMatches("errorMessage", responseMesssage); + } + + @Test + public void setRequestHeaderSizeFilterShortcutWorks() { + testClient.get().uri("/headers").header("Host", "www.requestheadersize.org") + .header("HeaderName", "Some Very Large Header Name").exchange() + .expectStatus().isEqualTo(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE) + .expectHeader().valueMatches("errorMessage", responseMesssage); } @Test @@ -77,10 +86,10 @@ public class RequestHeaderSizeGatewayFilterFactoryTest extends BaseWebClientTest @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes() - .route("test_request_header_size", - r -> r.order(-1).host("**.test.org") - .filters(f -> f.setRequestHeaderSize(DataSize.of(46L, DataUnit.BYTES))).uri(uri)) + return builder.routes().route("test_request_header_size", + r -> r.order(-1).host("**.testrequestheadersizefilter.org").filters( + f -> f.setRequestHeaderSize(DataSize.of(46L, DataUnit.BYTES))) + .uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/resources/application.yml b/spring-cloud-gateway-server/src/test/resources/application.yml index 6e67b3cd..840ff6e3 100644 --- a/spring-cloud-gateway-server/src/test/resources/application.yml +++ b/spring-cloud-gateway-server/src/test/resources/application.yml @@ -288,6 +288,14 @@ spring: - AddResponseHeader=X-Request-Foo, Bar - RemoveResponseHeader=X-Request-Foo + # ===================================== + - id: request_header_size_test + uri: ${test.uri} + predicates: + - Host=**.requestheadersize.org + filters: + - RequestHeaderSize=4 + # ===================================== - id: rewrite_location_response_header_test uri: ${test.uri}