Adds shortcut support to RequestHeaderSizeGatewayFilterFactory
Fixes gh-1879
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user