From 8ebdfbba27b52aaae9147358e86b85899dd00b66 Mon Sep 17 00:00:00 2001 From: spencergibb Date: Wed, 17 Feb 2021 11:53:01 -0500 Subject: [PATCH] Adds shortcut support to RequestHeaderSizeGatewayFilterFactory Fixes gh-1879 --- .../RequestHeaderSizeGatewayFilterFactory.java | 8 +++++++- ...RequestHeaderSizeGatewayFilterFactoryTest.java | 15 ++++++++++++--- .../src/test/resources/application.yml | 8 ++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) 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 1f7da932..f22f0e8e 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 extends super(RequestHeaderSizeGatewayFilterFactory.Config.class); } + @Override + public List shortcutFieldOrder() { + return Collections.singletonList("maxSize"); + } + @Override public GatewayFilter apply(RequestHeaderSizeGatewayFilterFactory.Config config) { return new GatewayFilter() { @@ -63,7 +69,7 @@ public class RequestHeaderSizeGatewayFilterFactory extends 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 299b83c0..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,8 +52,17 @@ 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") + 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); @@ -78,7 +87,7 @@ 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( + 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 e00d030b..b47cd5cd 100644 --- a/spring-cloud-gateway-server/src/test/resources/application.yml +++ b/spring-cloud-gateway-server/src/test/resources/application.yml @@ -325,6 +325,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}