Allows multiple values applied with AddRequestHeaderGatewayFilterFactory

Fixes gh-1902
This commit is contained in:
Dennis Menge
2020-10-01 17:20:07 +02:00
committed by spencergibb
parent 333786c58a
commit 779187e6ae
3 changed files with 38 additions and 5 deletions

View File

@@ -40,7 +40,7 @@ public class AddRequestHeaderGatewayFilterFactory
GatewayFilterChain chain) {
String value = ServerWebExchangeUtils.expand(exchange, config.getValue());
ServerHttpRequest request = exchange.getRequest().mutate()
.header(config.getName(), value).build();
.headers(httpHeaders -> httpHeaders.add(config.getName(), value)).build();
return chain.filter(exchange.mutate().request(request).build());
}

View File

@@ -16,6 +16,7 @@
package org.springframework.cloud.gateway.filter.factory;
import java.util.Arrays;
import java.util.Map;
import org.junit.Test;
@@ -60,6 +61,16 @@ public class AddRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest
});
}
@Test
public void addRequestHeaderFilterWorksMultipleValues() {
testClient.get().uri("/multivalueheaders").header("Host", "www.addrequestheader.org").exchange()
.expectBody(Map.class)
.consumeWith(result -> {
Map<String, Object> headers = getMap(result.getResponseBody(), "headers");
assertThat(headers).containsEntry("X-Request-Example", Arrays.asList("ValueA", "ValueB"));
});
}
@Test
public void addRequestHeaderFilterWorksJavaDsl() {
testClient.get().uri("/headers").header("Host", "www.addrequestheaderjava.org")
@@ -70,6 +81,16 @@ public class AddRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest
});
}
@Test
public void addRequestHeaderFilterMultipleValuesWorksJavaDsl() {
testClient.get().uri("/multivalueheaders").header("Host", "www.addrequestheaderjava.org").exchange()
.expectBody(Map.class)
.consumeWith(result -> {
Map<String, Object> headers = getMap(result.getResponseBody(), "headers");
assertThat(headers).containsEntry("X-Request-Acme", Arrays.asList("ValueB-www", "ValueC-www"));
});
}
@Test
public void toStringFormat() {
NameValueConfig config = new NameValueConfig().setName("myname")
@@ -90,9 +111,14 @@ public class AddRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest
public RouteLocator testRouteLocator(RouteLocatorBuilder builder) {
return builder.routes().route("add_request_header_java_test",
r -> r.path("/headers").and().host("{sub}.addrequestheaderjava.org")
.filters(f -> f.prefixPath("/httpbin")
.addRequestHeader("X-Request-Acme", "ValueB-{sub}"))
.filters(f -> f.prefixPath("/httpbin").addRequestHeader("X-Request-Acme", "ValueB-{sub}"))
.uri(uri))
.route("add_multiple_request_header_java_test",
r -> r.path("/multivalueheaders").and().host("{sub}.addrequestheaderjava.org")
.filters(f -> f.prefixPath("/httpbin")
.addRequestHeader("X-Request-Acme", "ValueB-{sub}")
.addRequestHeader("X-Request-Acme", "ValueC-{sub}"))
.uri(uri))
.build();
}

View File

@@ -5,6 +5,13 @@ spring:
- id: add_request_header_test
uri: ${test.uri}
predicates:
- Path=/headers
- Path=/headers
filters:
- AddRequestHeader=X-Request-Example, ValueA
- AddRequestHeader=X-Request-Example, ValueA
- id: add_multiple_request_header_test
uri: ${test.uri}
predicates:
- Path=/multivalueheaders
filters:
- AddRequestHeader=X-Request-Example, ValueA
- AddRequestHeader=X-Request-Example, ValueB