Skip to content

Commit 6db4ee1

Browse files
committed
Updates to*Case() to use Locale.ROOT
1 parent 679bc2c commit 6db4ee1

File tree

18 files changed

+51
-32
lines changed

18 files changed

+51
-32
lines changed

spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.HashSet;
3232
import java.util.LinkedHashSet;
3333
import java.util.List;
34+
import java.util.Locale;
3435
import java.util.Set;
3536
import java.util.Vector;
3637
import java.util.function.Function;
@@ -234,7 +235,7 @@ public ProxyExchange<T> excluded(String... names) {
234235

235236
this.excluded.clear();
236237
for (String name : names) {
237-
this.excluded.add(name.toLowerCase());
238+
this.excluded.add(name.toLowerCase(Locale.ROOT));
238239
}
239240
return this;
240241
}
@@ -384,7 +385,7 @@ private Set<String> filterHeaderKeys(HttpHeaders headers) {
384385
private Set<String> filterHeaderKeys(Collection<String> headerNames) {
385386
final Set<String> excludedHeaders = this.excluded != null ? this.excluded : Collections.emptySet();
386387
return headerNames.stream()
387-
.filter(header -> !excludedHeaders.contains(header.toLowerCase()))
388+
.filter(header -> !excludedHeaders.contains(header.toLowerCase(Locale.ROOT)))
388389
.collect(Collectors.toSet());
389390
}
390391

spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.lang.reflect.Type;
2121
import java.util.Collections;
2222
import java.util.Enumeration;
23+
import java.util.Locale;
2324
import java.util.Set;
2425

2526
import jakarta.servlet.http.HttpServletRequest;
@@ -101,7 +102,7 @@ private HttpHeaders extractAutoForwardedHeaders(NativeWebRequest webRequest) {
101102
HttpHeaders headers = new HttpHeaders();
102103
while (headerNames.hasMoreElements()) {
103104
String header = headerNames.nextElement();
104-
if (this.autoForwardedHeaders.contains(header.toLowerCase())) {
105+
if (this.autoForwardedHeaders.contains(header.toLowerCase(Locale.ROOT))) {
105106
headers.addAll(header, Collections.list(nativeRequest.getHeaders(header)));
106107
}
107108
}

spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/GatewaySampleApplication.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.cloud.gateway.sample;
1818

19+
import java.util.Locale;
1920
import java.util.Map;
2021
import java.util.concurrent.TimeUnit;
2122

@@ -77,7 +78,7 @@ public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
7778
.addResponseHeader("X-TestHeader", "rewrite_request")
7879
.modifyRequestBody(String.class, Hello.class, MediaType.APPLICATION_JSON_VALUE,
7980
(exchange, s) -> {
80-
return Mono.just(new Hello(s.toUpperCase()));
81+
return Mono.just(new Hello(s.toUpperCase(Locale.ROOT)));
8182
})
8283
).uri(uri)
8384
)
@@ -86,7 +87,7 @@ public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
8687
.addResponseHeader("X-TestHeader", "rewrite_request_upper")
8788
.modifyRequestBody(String.class, String.class,
8889
(exchange, s) -> {
89-
return Mono.just(s.toUpperCase() + s.toUpperCase());
90+
return Mono.just(s.toUpperCase(Locale.ROOT) + s.toUpperCase(Locale.ROOT));
9091
})
9192
).uri(uri)
9293
)
@@ -95,7 +96,7 @@ public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
9596
.addResponseHeader("X-TestHeader", "rewrite_response_upper")
9697
.modifyResponseBody(String.class, String.class,
9798
(exchange, s) -> {
98-
return Mono.just(s.toUpperCase());
99+
return Mono.just(s.toUpperCase(Locale.ROOT));
99100
})
100101
).uri(uri)
101102
)
@@ -107,7 +108,7 @@ public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
107108
if (s == null) {
108109
return Mono.just("emptybody");
109110
}
110-
return Mono.just(s.toUpperCase());
111+
return Mono.just(s.toUpperCase(Locale.ROOT));
111112
})
112113

113114
).uri(uri)
@@ -120,7 +121,7 @@ public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
120121
if (s == null) {
121122
return Mono.error(new IllegalArgumentException("this should not happen"));
122123
}
123-
return Mono.just(s.toUpperCase());
124+
return Mono.just(s.toUpperCase(Locale.ROOT));
124125
})
125126
).uri(uri)
126127
)

spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/common/HttpStatusHolder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.cloud.gateway.server.mvc.common;
1818

19+
import java.util.Locale;
20+
1921
import org.springframework.core.style.ToStringCreator;
2022
import org.springframework.http.HttpStatus;
2123
import org.springframework.http.HttpStatusCode;
@@ -36,7 +38,7 @@ public HttpStatusHolder(HttpStatusCode httpStatus, Integer status) {
3638
public static HttpStatusHolder valueOf(String status) {
3739
HttpStatusCode httpStatus;
3840
try {
39-
httpStatus = HttpStatus.valueOf(status.toUpperCase());
41+
httpStatus = HttpStatus.valueOf(status.toUpperCase(Locale.ROOT));
4042
}
4143
catch (IllegalArgumentException e) {
4244
httpStatus = null;

spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/config/RouterFunctionHolderFactory.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.HashMap;
2323
import java.util.LinkedHashMap;
2424
import java.util.List;
25+
import java.util.Locale;
2526
import java.util.Map;
2627
import java.util.Optional;
2728
import java.util.concurrent.atomic.AtomicReference;
@@ -163,13 +164,13 @@ private RouterFunction getRouterFunction(RouteProperties routeProperties, String
163164
String scheme = routeProperties.getUri().getScheme();
164165
Map<String, Object> handlerArgs = new HashMap<>();
165166
Optional<NormalizedOperationMethod> handlerOperationMethod = findOperation(handlerOperations,
166-
scheme.toLowerCase(), handlerArgs);
167+
scheme.toLowerCase(Locale.ROOT), handlerArgs);
167168
if (handlerOperationMethod.isEmpty()) {
168169
// single RouteProperties param
169170
handlerArgs.clear();
170171
String routePropsKey = StringUtils.uncapitalize(RouteProperties.class.getSimpleName());
171172
handlerArgs.put(routePropsKey, routeProperties);
172-
handlerOperationMethod = findOperation(handlerOperations, scheme.toLowerCase(), handlerArgs);
173+
handlerOperationMethod = findOperation(handlerOperations, scheme.toLowerCase(Locale.ROOT), handlerArgs);
173174
if (handlerOperationMethod.isEmpty()) {
174175
throw new IllegalStateException("Unable to find HandlerFunction for scheme: " + scheme);
175176
}

spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/RemoveHopByHopRequestHeadersFilter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Arrays;
2020
import java.util.HashSet;
2121
import java.util.List;
22+
import java.util.Locale;
2223
import java.util.Map;
2324
import java.util.Set;
2425

@@ -55,7 +56,7 @@ static HttpHeaders filter(HttpHeaders input, Set<String> headersToRemove) {
5556
HttpHeaders filtered = new HttpHeaders();
5657

5758
for (Map.Entry<String, List<String>> entry : input.entrySet()) {
58-
if (!headersToRemove.contains(entry.getKey().toLowerCase())) {
59+
if (!headersToRemove.contains(entry.getKey().toLowerCase(Locale.ROOT))) {
5960
filtered.addAll(entry.getKey(), entry.getValue());
6061
}
6162
}

spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/ServerMvcIntegrationTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.time.Duration;
2525
import java.util.Collections;
2626
import java.util.List;
27+
import java.util.Locale;
2728
import java.util.Map;
2829
import java.util.concurrent.ConcurrentHashMap;
2930
import java.util.concurrent.atomic.AtomicInteger;
@@ -1533,12 +1534,12 @@ public RouterFunction<ServerResponse> gatewayRouterFunctionsModifyRequestBody()
15331534
return route("testmodifyrequestbodystring")
15341535
.POST("/post", host("**.modifyrequestbodystring.org"), http())
15351536
.before(new HttpbinUriResolver())
1536-
.before(modifyRequestBody(String.class, String.class, null, (request, s) -> s.toUpperCase() + s.toUpperCase()))
1537+
.before(modifyRequestBody(String.class, String.class, null, (request, s) -> s.toUpperCase(Locale.ROOT) + s.toUpperCase(Locale.ROOT)))
15371538
.build().and(
15381539
route("testmodifyrequestbodyobject")
15391540
.POST("/post", host("**.modifyrequestbodyobject.org"), http())
15401541
.before(new HttpbinUriResolver())
1541-
.before(modifyRequestBody(String.class, Hello.class, MediaType.APPLICATION_JSON_VALUE, (request, s) -> new Hello(s.toUpperCase())))
1542+
.before(modifyRequestBody(String.class, Hello.class, MediaType.APPLICATION_JSON_VALUE, (request, s) -> new Hello(s.toUpperCase(Locale.ROOT))))
15421543
.build());
15431544
// @formatter:on
15441545
}

spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/VanillaRouterFunctionTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.cloud.gateway.server.mvc;
1818

19+
import java.util.Locale;
1920
import java.util.Map;
2021

2122
import org.junit.jupiter.api.Test;
@@ -79,7 +80,7 @@ public RouterFunction<ServerResponse> routerFunctionsRoute() {
7980
// @formatter:off
8081
return RouterFunctions.route()
8182
.POST("/anything/routerfunctionsroute", host("**.routerfunctionsroute.org"), http())
82-
.before(modifyRequestBody(String.class, String.class, null, (request, s) -> s.toUpperCase()))
83+
.before(modifyRequestBody(String.class, String.class, null, (request, s) -> s.toUpperCase(Locale.ROOT)))
8384
.before(new HttpbinUriResolver())
8485
.build();
8586
// @formatter:on

spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.net.URI;
2020
import java.util.LinkedHashMap;
2121
import java.util.List;
22+
import java.util.Locale;
2223
import java.util.Map;
2324
import java.util.function.Predicate;
2425

@@ -170,7 +171,7 @@ private DelegatingServiceInstance(ServiceInstance delegate, DiscoveryLocatorProp
170171
@Override
171172
public String getServiceId() {
172173
if (properties.isLowerCaseServiceId()) {
173-
return delegate.getServiceId().toLowerCase();
174+
return delegate.getServiceId().toLowerCase(Locale.ROOT);
174175
}
175176
return delegate.getServiceId();
176177
}

spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebsocketRoutingFilter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Arrays;
2222
import java.util.Collections;
2323
import java.util.List;
24+
import java.util.Locale;
2425
import java.util.Map;
2526

2627
import org.apache.commons.logging.Log;
@@ -79,7 +80,7 @@ public WebsocketRoutingFilter(WebSocketClient webSocketClient, WebSocketService
7980

8081
/* for testing */
8182
static String convertHttpToWs(String scheme) {
82-
scheme = scheme.toLowerCase();
83+
scheme = scheme.toLowerCase(Locale.ROOT);
8384
return "http".equals(scheme) ? "ws" : "https".equals(scheme) ? "wss" : scheme;
8485
}
8586

@@ -143,7 +144,7 @@ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
143144
headersFilters.add((headers, exchange) -> {
144145
HttpHeaders filtered = new HttpHeaders();
145146
for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
146-
if (!entry.getKey().toLowerCase().startsWith("sec-websocket")) {
147+
if (!entry.getKey().toLowerCase(Locale.ROOT).startsWith("sec-websocket")) {
147148
filtered.addAll(entry.getKey(), entry.getValue());
148149
}
149150
}
@@ -157,7 +158,7 @@ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
157158
static void changeSchemeIfIsWebSocketUpgrade(ServerWebExchange exchange) {
158159
// Check the Upgrade
159160
URI requestUrl = exchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR);
160-
String scheme = requestUrl.getScheme().toLowerCase();
161+
String scheme = requestUrl.getScheme().toLowerCase(Locale.ROOT);
161162
String upgrade = exchange.getRequest().getHeaders().getUpgrade();
162163
// change the scheme if the socket client send a "http" or "https"
163164
if ("WebSocket".equalsIgnoreCase(upgrade) && ("http".equals(scheme) || "https".equals(scheme))) {

spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.cloud.gateway.filter.factory;
1818

1919
import java.util.List;
20+
import java.util.Locale;
2021

2122
import reactor.core.publisher.Mono;
2223

@@ -136,7 +137,7 @@ public String toString() {
136137
}
137138

138139
private boolean isEnabled(List<String> disabledHeaders, String header) {
139-
return !disabledHeaders.contains(header.toLowerCase());
140+
return !disabledHeaders.contains(header.toLowerCase(Locale.ROOT));
140141
}
141142

142143
public static class Config {

spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/RemoveHopByHopHeadersFilter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Arrays;
2020
import java.util.HashSet;
2121
import java.util.List;
22+
import java.util.Locale;
2223
import java.util.Map;
2324
import java.util.Set;
2425
import java.util.stream.Collectors;
@@ -74,7 +75,7 @@ public HttpHeaders filter(HttpHeaders originalHeaders, ServerWebExchange exchang
7475
headersToRemove.addAll(connectionOptions);
7576

7677
for (Map.Entry<String, List<String>> entry : originalHeaders.entrySet()) {
77-
if (!headersToRemove.contains(entry.getKey().toLowerCase())) {
78+
if (!headersToRemove.contains(entry.getKey().toLowerCase(Locale.ROOT))) {
7879
filtered.addAll(entry.getKey(), entry.getValue());
7980
}
8081
}

spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/NameUtils.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.cloud.gateway.support;
1818

19+
import java.util.Locale;
1920
import java.util.regex.Matcher;
2021
import java.util.regex.Pattern;
2122

@@ -79,7 +80,7 @@ public static String normalizeToCanonicalPropertyFormat(String name) {
7980
matcher.appendReplacement(stringBuffer, matcher.group(1));
8081
}
8182
}
82-
return stringBuffer.toString().toLowerCase();
83+
return stringBuffer.toString().toLowerCase(Locale.ROOT);
8384
}
8485

8586
private static String removeGarbage(String s) {

spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ServerWebExchangeUtils.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Collections;
2121
import java.util.HashMap;
2222
import java.util.LinkedHashSet;
23+
import java.util.Locale;
2324
import java.util.Map;
2425
import java.util.Set;
2526
import java.util.function.Function;
@@ -268,7 +269,7 @@ public static HttpStatus parse(String statusString) {
268269
}
269270
catch (NumberFormatException e) {
270271
// try the enum string
271-
httpStatus = HttpStatus.valueOf(statusString.toUpperCase());
272+
httpStatus = HttpStatus.valueOf(statusString.toUpperCase(Locale.ROOT));
272273
}
273274
return httpStatus;
274275
}

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocatorTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@
4848
"spring.cloud.gateway.discovery.locator.lower-case-service-id=true"
4949
/*
5050
* "spring.cloud.gateway.discovery.locator.predicates[0].name=Path",
51-
* "spring.cloud.gateway.discovery.locator.predicates[0].args[pattern]='/'+serviceId.toLowerCase()+'/**'",
51+
* "spring.cloud.gateway.discovery.locator.predicates[0].args[pattern]='/'+serviceId.toLowerCase(Locale.ROOT)+'/**'",
5252
* "spring.cloud.gateway.discovery.locator.filters[0].name=RewritePath",
53-
* "spring.cloud.gateway.discovery.locator.filters[0].args[regexp]='/' + serviceId.toLowerCase() + '/(?<remaining>.*)'"
53+
* "spring.cloud.gateway.discovery.locator.filters[0].args[regexp]='/' + serviceId.toLowerCase(Locale.ROOT) + '/(?<remaining>.*)'"
5454
* ,
5555
* "spring.cloud.gateway.discovery.locator.filters[0].args[replacement]='/$\\\\{remaining}'",
5656
*/

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactoryTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.cloud.gateway.filter.factory.rewrite;
1818

19+
import java.util.Locale;
20+
1921
import org.junit.jupiter.api.Test;
2022
import reactor.core.publisher.Mono;
2123

@@ -134,7 +136,7 @@ public RouteLocator testRouteLocator(RouteLocatorBuilder builder) {
134136
if (body == null) {
135137
return Mono.just("modifyrequest");
136138
}
137-
return Mono.just(body.toUpperCase());
139+
return Mono.just(body.toUpperCase(Locale.ROOT));
138140
}))
139141
.uri(uri))
140142
.route("test_modify_request_body_to_large",
@@ -152,7 +154,7 @@ public RouteLocator testRouteLocator(RouteLocatorBuilder builder) {
152154
.filters(f -> f.modifyRequestBody(new ParameterizedTypeReference<String>() {
153155
}, new ParameterizedTypeReference<String>() {
154156
}, (swe, body) -> {
155-
return Mono.just(body.replaceAll(" ", "_").toUpperCase());
157+
return Mono.just(body.replaceAll(" ", "_").toUpperCase(Locale.ROOT));
156158
}))
157159
.uri(uri))
158160
.build();

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/RemoveHopByHopHeadersFilterTests.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Arrays;
2020
import java.util.HashSet;
2121
import java.util.LinkedHashSet;
22+
import java.util.Locale;
2223
import java.util.Set;
2324

2425
import org.junit.jupiter.api.Test;
@@ -50,7 +51,7 @@ public void happyPath() {
5051
public void caseInsensitive() {
5152
MockServerHttpRequest.BaseBuilder<?> builder = MockServerHttpRequest.get("http://localhost/get");
5253

53-
HEADERS_REMOVED_ON_REQUEST.forEach(header -> builder.header(header.toLowerCase(), header + "1"));
54+
HEADERS_REMOVED_ON_REQUEST.forEach(header -> builder.header(header.toLowerCase(Locale.ROOT), header + "1"));
5455

5556
testFilter(MockServerWebExchange.from(builder));
5657
}
@@ -60,7 +61,7 @@ public void caseInsensitiveCustom() {
6061
MockServerHttpRequest.BaseBuilder<?> builder = MockServerHttpRequest.get("http://localhost/get");
6162

6263
HEADERS_REMOVED_ON_REQUEST
63-
.forEach(header -> builder.header(StringUtils.capitalize(header.toLowerCase()), header + "1"));
64+
.forEach(header -> builder.header(StringUtils.capitalize(header.toLowerCase(Locale.ROOT)), header + "1"));
6465

6566
LinkedHashSet<String> customHeaders = new LinkedHashSet<>();
6667
HEADERS_REMOVED_ON_REQUEST.forEach(header -> {
@@ -78,7 +79,7 @@ public void removesHeadersListedInConnectionHeader() {
7879

7980
String arbitraryConnectionOption = "xyz";
8081
assumeThat(HEADERS_REMOVED_ON_REQUEST).doesNotContain(arbitraryConnectionOption);
81-
builder.header(HttpHeaders.CONNECTION, "upgrade", "keep-alive", arbitraryConnectionOption.toUpperCase());
82+
builder.header(HttpHeaders.CONNECTION, "upgrade", "keep-alive", arbitraryConnectionOption.toUpperCase(Locale.ROOT));
8283
builder.header(HttpHeaders.UPGRADE, "WebSocket");
8384
builder.header("Keep-Alive", "timeout=5");
8485
builder.header(arbitraryConnectionOption, "");

0 commit comments

Comments
 (0)