Adds shortcut support to RequestHeaderSizeGatewayFilterFactory

Fixes gh-1879
This commit is contained in:
spencergibb
2021-02-17 11:53:01 -05:00
parent 15db93cca9
commit 8ebdfbba27
3 changed files with 27 additions and 4 deletions

View File

@@ -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<String> 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<String, List<String>> headerEntry : headers.entrySet()) {
List<String> values = headerEntry.getValue();
for (String value : values) {
headerSizeInBytes += Long.valueOf(value.getBytes().length);
headerSizeInBytes += (long) value.getBytes().length;
}
}

View File

@@ -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();

View File

@@ -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}