Allows multiple values applied with AddRequestHeaderGatewayFilterFactory
Fixes gh-1902
This commit is contained in:
committed by
spencergibb
parent
333786c58a
commit
779187e6ae
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user