Skip to content

Commit 139a57f

Browse files
committed
Merge branch '4.1.x'
2 parents 4721a92 + f444ad5 commit 139a57f

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactory.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.springframework.cloud.gateway.handler.predicate;
1818

1919
import java.util.Arrays;
20-
import java.util.Collections;
2120
import java.util.List;
2221
import java.util.function.Predicate;
2322
import java.util.regex.Pattern;
@@ -59,9 +58,7 @@ public Predicate<ServerWebExchange> apply(Config config) {
5958
return new GatewayPredicate() {
6059
@Override
6160
public boolean test(ServerWebExchange exchange) {
62-
List<String> values = exchange.getRequest()
63-
.getHeaders()
64-
.getOrDefault(config.header, Collections.emptyList());
61+
List<String> values = exchange.getRequest().getHeaders().getValuesAsList(config.header);
6562
if (values.isEmpty()) {
6663
return false;
6764
}

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactoryTests.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,20 @@ public void toStringFormat() {
9292
assertThat(predicate.toString()).contains("Header: myheader regexp=myregexp");
9393
}
9494

95+
@Test
96+
public void headerRouteHandlesCommaSeparatedValues() {
97+
testClient.get()
98+
.uri("/get")
99+
.header("X-Example-Header", "value1, value2 ,exact_match,value3")
100+
.exchange()
101+
.expectStatus()
102+
.isOk()
103+
.expectHeader()
104+
.valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName())
105+
.expectHeader()
106+
.valueEquals(ROUTE_ID_HEADER, "header_test_comma_separated");
107+
}
108+
95109
@EnableAutoConfiguration
96110
@SpringBootConfiguration
97111
@Import(DefaultTestConfig.class)
@@ -104,6 +118,10 @@ public static class TestConfig {
104118
RouteLocator queryRouteLocator(RouteLocatorBuilder builder) {
105119
return builder.routes()
106120
.route("header_exists_dsl", r -> r.header("X-Foo").filters(f -> f.prefixPath("/httpbin")).uri(uri))
121+
.route("header_test_comma_separated",
122+
r -> r.header("X-Example-Header", "exact_match")
123+
.filters(f -> f.prefixPath("/httpbin"))
124+
.uri(uri))
107125
.build();
108126
}
109127

0 commit comments

Comments
 (0)