Merge branch '6.1.x'
This commit is contained in:
@@ -391,7 +391,7 @@ public class HttpHeaders implements MultiValueMap<String, String>, Serializable
|
||||
*/
|
||||
public static final HttpHeaders EMPTY = new ReadOnlyHttpHeaders(new LinkedMultiValueMap<>());
|
||||
|
||||
private static final DecimalFormatSymbols DECIMAL_FORMAT_SYMBOLS = new DecimalFormatSymbols(Locale.ENGLISH);
|
||||
private static final DecimalFormatSymbols DECIMAL_FORMAT_SYMBOLS = new DecimalFormatSymbols(Locale.ROOT);
|
||||
|
||||
private static final ZoneId GMT = ZoneId.of("GMT");
|
||||
|
||||
@@ -421,7 +421,7 @@ public class HttpHeaders implements MultiValueMap<String, String>, Serializable
|
||||
* <p>This is the common constructor, using a case-insensitive map structure.
|
||||
*/
|
||||
public HttpHeaders() {
|
||||
this(CollectionUtils.toMultiValueMap(new LinkedCaseInsensitiveMap<>(8, Locale.ENGLISH)));
|
||||
this(CollectionUtils.toMultiValueMap(new LinkedCaseInsensitiveMap<>(8, Locale.ROOT)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -717,7 +717,7 @@ public class HttpHeaders implements MultiValueMap<String, String>, Serializable
|
||||
public void setAcceptCharset(List<Charset> acceptableCharsets) {
|
||||
StringJoiner joiner = new StringJoiner(", ");
|
||||
for (Charset charset : acceptableCharsets) {
|
||||
joiner.add(charset.name().toLowerCase(Locale.ENGLISH));
|
||||
joiner.add(charset.name().toLowerCase(Locale.ROOT));
|
||||
}
|
||||
set(ACCEPT_CHARSET, joiner.toString());
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -77,7 +77,7 @@ public final class MediaTypeFactory {
|
||||
String[] tokens = StringUtils.tokenizeToStringArray(line, " \t\n\r\f");
|
||||
MediaType mediaType = MediaType.parseMediaType(tokens[0]);
|
||||
for (int i = 1; i < tokens.length; i++) {
|
||||
String fileExtension = tokens[i].toLowerCase(Locale.ENGLISH);
|
||||
String fileExtension = tokens[i].toLowerCase(Locale.ROOT);
|
||||
result.add(fileExtension, mediaType);
|
||||
}
|
||||
}
|
||||
@@ -117,7 +117,7 @@ public final class MediaTypeFactory {
|
||||
List<MediaType> mediaTypes = null;
|
||||
String ext = StringUtils.getFilenameExtension(filename);
|
||||
if (ext != null) {
|
||||
mediaTypes = fileExtensionToMediaTypes.get(ext.toLowerCase(Locale.ENGLISH));
|
||||
mediaTypes = fileExtensionToMediaTypes.get(ext.toLowerCase(Locale.ROOT));
|
||||
}
|
||||
return (mediaTypes != null ? mediaTypes : Collections.emptyList());
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import java.net.http.HttpTimeoutException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.time.Duration;
|
||||
import java.util.Collections;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.concurrent.CancellationException;
|
||||
@@ -141,7 +142,7 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest {
|
||||
HttpRequest.Builder builder = HttpRequest.newBuilder().uri(this.uri);
|
||||
|
||||
headers.forEach((headerName, headerValues) -> {
|
||||
if (!DISALLOWED_HEADERS.contains(headerName.toLowerCase())) {
|
||||
if (!DISALLOWED_HEADERS.contains(headerName.toLowerCase(Locale.ROOT))) {
|
||||
for (String headerValue : headerValues) {
|
||||
builder.header(headerName, headerValue);
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ class JdkClientHttpResponse implements ClientHttpResponse {
|
||||
|
||||
private static HttpHeaders adaptHeaders(HttpResponse<?> response) {
|
||||
Map<String, List<String>> rawHeaders = response.headers().map();
|
||||
Map<String, List<String>> map = new LinkedCaseInsensitiveMap<>(rawHeaders.size(), Locale.ENGLISH);
|
||||
Map<String, List<String>> map = new LinkedCaseInsensitiveMap<>(rawHeaders.size(), Locale.ROOT);
|
||||
MultiValueMap<String, String> multiValueMap = CollectionUtils.toMultiValueMap(map);
|
||||
multiValueMap.putAll(rawHeaders);
|
||||
return HttpHeaders.readOnlyHttpHeaders(multiValueMap);
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package org.springframework.http.client.observation;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Locale;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import io.micrometer.common.KeyValue;
|
||||
@@ -89,7 +90,7 @@ public class DefaultClientRequestObservationConvention implements ClientRequestO
|
||||
@Nullable
|
||||
public String getContextualName(ClientRequestObservationContext context) {
|
||||
ClientHttpRequest request = context.getCarrier();
|
||||
return (request != null ? "http " + request.getMethod().name().toLowerCase() : null);
|
||||
return (request != null ? "http " + request.getMethod().name().toLowerCase(Locale.ROOT) : null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -68,7 +68,7 @@ class JdkClientHttpResponse extends AbstractClientHttpResponse {
|
||||
|
||||
private static HttpHeaders adaptHeaders(HttpResponse<Flow.Publisher<List<ByteBuffer>>> response) {
|
||||
Map<String, List<String>> rawHeaders = response.headers().map();
|
||||
Map<String, List<String>> map = new LinkedCaseInsensitiveMap<>(rawHeaders.size(), Locale.ENGLISH);
|
||||
Map<String, List<String>> map = new LinkedCaseInsensitiveMap<>(rawHeaders.size(), Locale.ROOT);
|
||||
MultiValueMap<String, String> multiValueMap = CollectionUtils.toMultiValueMap(map);
|
||||
multiValueMap.putAll(rawHeaders);
|
||||
return HttpHeaders.readOnlyHttpHeaders(multiValueMap);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.http.server.observation;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
@@ -89,7 +90,7 @@ public class DefaultServerRequestObservationConvention implements ServerRequestO
|
||||
|
||||
@Override
|
||||
public String getContextualName(ServerRequestObservationContext context) {
|
||||
String httpMethod = context.getCarrier().getMethod().toLowerCase();
|
||||
String httpMethod = context.getCarrier().getMethod().toLowerCase(Locale.ROOT);
|
||||
if (context.getPathPattern() != null) {
|
||||
return "http " + httpMethod + " " + context.getPathPattern();
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ class ServletServerHttpRequest extends AbstractServerHttpRequest {
|
||||
|
||||
private static MultiValueMap<String, String> createDefaultHttpHeaders(HttpServletRequest request) {
|
||||
MultiValueMap<String, String> headers =
|
||||
CollectionUtils.toMultiValueMap(new LinkedCaseInsensitiveMap<>(8, Locale.ENGLISH));
|
||||
CollectionUtils.toMultiValueMap(new LinkedCaseInsensitiveMap<>(8, Locale.ROOT));
|
||||
for (Enumeration<?> names = request.getHeaderNames(); names.hasMoreElements(); ) {
|
||||
String name = (String) names.nextElement();
|
||||
for (Enumeration<?> values = request.getHeaders(name); values.hasMoreElements(); ) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.http.server.reactive.observation;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import io.micrometer.common.KeyValue;
|
||||
@@ -87,7 +88,7 @@ public class DefaultServerRequestObservationConvention implements ServerRequestO
|
||||
|
||||
@Override
|
||||
public String getContextualName(ServerRequestObservationContext context) {
|
||||
String httpMethod = context.getCarrier().getMethod().name().toLowerCase();
|
||||
String httpMethod = context.getCarrier().getMethod().name().toLowerCase(Locale.ROOT);
|
||||
if (context.getPathPattern() != null) {
|
||||
return "http " + httpMethod + " " + context.getPathPattern();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -214,7 +214,7 @@ public class ContentNegotiationManagerFactoryBean
|
||||
* An alternative to {@link #setMediaTypes} for programmatic registrations.
|
||||
*/
|
||||
public void addMediaType(String key, MediaType mediaType) {
|
||||
this.mediaTypes.put(key.toLowerCase(Locale.ENGLISH), mediaType);
|
||||
this.mediaTypes.put(key.toLowerCase(Locale.ROOT), mediaType);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -57,7 +57,7 @@ public class MappingMediaTypeFileExtensionResolver implements MediaTypeFileExten
|
||||
if (mediaTypes != null) {
|
||||
Set<String> allFileExtensions = CollectionUtils.newHashSet(mediaTypes.size());
|
||||
mediaTypes.forEach((extension, mediaType) -> {
|
||||
String lowerCaseExtension = extension.toLowerCase(Locale.ENGLISH);
|
||||
String lowerCaseExtension = extension.toLowerCase(Locale.ROOT);
|
||||
this.mediaTypes.put(lowerCaseExtension, mediaType);
|
||||
addFileExtension(mediaType, lowerCaseExtension);
|
||||
allFileExtensions.add(lowerCaseExtension);
|
||||
@@ -109,7 +109,7 @@ public class MappingMediaTypeFileExtensionResolver implements MediaTypeFileExten
|
||||
*/
|
||||
@Nullable
|
||||
protected MediaType lookupMediaType(String extension) {
|
||||
return this.mediaTypes.get(extension.toLowerCase(Locale.ENGLISH));
|
||||
return this.mediaTypes.get(extension.toLowerCase(Locale.ROOT));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2020 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -99,7 +99,7 @@ public class PathExtensionContentNegotiationStrategy extends AbstractMappingCont
|
||||
// Ignore LOOKUP_PATH attribute, use our own "fixed" UrlPathHelper with decoding off
|
||||
String path = this.urlPathHelper.getLookupPathForRequest(request);
|
||||
String extension = UriUtils.extractFileExtension(path);
|
||||
return (StringUtils.hasText(extension) ? extension.toLowerCase(Locale.ENGLISH) : null);
|
||||
return (StringUtils.hasText(extension) ? extension.toLowerCase(Locale.ROOT) : null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -105,7 +105,7 @@ public class RestClientResponseException extends RestClientException {
|
||||
private static HttpHeaders copyHeaders(@Nullable HttpHeaders headers) {
|
||||
if (headers != null) {
|
||||
MultiValueMap<String, String> result =
|
||||
CollectionUtils.toMultiValueMap(new LinkedCaseInsensitiveMap<>(headers.size(), Locale.ENGLISH));
|
||||
CollectionUtils.toMultiValueMap(new LinkedCaseInsensitiveMap<>(headers.size(), Locale.ROOT));
|
||||
headers.forEach((name, values) -> values.forEach(value -> result.add(name, value)));
|
||||
return HttpHeaders.readOnlyHttpHeaders(result);
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter {
|
||||
private static final Log logger = LogFactory.getLog(ForwardedHeaderFilter.class);
|
||||
|
||||
private static final Set<String> FORWARDED_HEADER_NAMES =
|
||||
Collections.newSetFromMap(new LinkedCaseInsensitiveMap<>(10, Locale.ENGLISH));
|
||||
Collections.newSetFromMap(new LinkedCaseInsensitiveMap<>(10, Locale.ROOT));
|
||||
|
||||
static {
|
||||
FORWARDED_HEADER_NAMES.add("Forwarded");
|
||||
@@ -204,7 +204,7 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter {
|
||||
}
|
||||
|
||||
private static Set<String> headerNames(HttpServletRequest request) {
|
||||
Set<String> headerNames = Collections.newSetFromMap(new LinkedCaseInsensitiveMap<>(Locale.ENGLISH));
|
||||
Set<String> headerNames = Collections.newSetFromMap(new LinkedCaseInsensitiveMap<>(Locale.ROOT));
|
||||
Enumeration<String> names = request.getHeaderNames();
|
||||
while (names.hasMoreElements()) {
|
||||
String name = names.nextElement();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -81,7 +81,7 @@ public class HiddenHttpMethodFilter extends OncePerRequestFilter {
|
||||
if ("POST".equals(request.getMethod()) && request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE) == null) {
|
||||
String paramValue = request.getParameter(this.methodParam);
|
||||
if (StringUtils.hasLength(paramValue)) {
|
||||
String method = paramValue.toUpperCase(Locale.ENGLISH);
|
||||
String method = paramValue.toUpperCase(Locale.ROOT);
|
||||
if (ALLOWED_METHODS.contains(method)) {
|
||||
requestToUse = new HttpMethodRequestWrapper(request, method);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -88,7 +88,7 @@ public class HiddenHttpMethodFilter implements WebFilter {
|
||||
}
|
||||
|
||||
private ServerWebExchange mapExchange(ServerWebExchange exchange, String methodParamValue) {
|
||||
HttpMethod httpMethod = HttpMethod.valueOf(methodParamValue.toUpperCase(Locale.ENGLISH));
|
||||
HttpMethod httpMethod = HttpMethod.valueOf(methodParamValue.toUpperCase(Locale.ROOT));
|
||||
if (ALLOWED_METHODS.contains(httpMethod)) {
|
||||
return exchange.mutate().request(builder -> builder.method(httpMethod)).build();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -19,6 +19,7 @@ package org.springframework.web.multipart.support;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.Part;
|
||||
@@ -71,7 +72,7 @@ public final class MultipartResolutionDelegate {
|
||||
|
||||
private static boolean isMultipartContent(HttpServletRequest request) {
|
||||
String contentType = request.getContentType();
|
||||
return (contentType != null && contentType.toLowerCase().startsWith("multipart/"));
|
||||
return (contentType != null && contentType.toLowerCase(Locale.ROOT).startsWith("multipart/"));
|
||||
}
|
||||
|
||||
static MultipartHttpServletRequest asMultipartHttpServletRequest(HttpServletRequest request) {
|
||||
|
||||
@@ -28,6 +28,7 @@ import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -118,7 +119,7 @@ public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpSe
|
||||
do {
|
||||
String msg = cause.getMessage();
|
||||
if (msg != null) {
|
||||
msg = msg.toLowerCase();
|
||||
msg = msg.toLowerCase(Locale.ROOT);
|
||||
if ((msg.contains("exceed") && (msg.contains("size") || msg.contains("length"))) ||
|
||||
(msg.contains("request") && (msg.contains("big") || msg.contains("large")))) {
|
||||
throw new MaxUploadSizeExceededException(-1, ex);
|
||||
|
||||
@@ -61,7 +61,7 @@ import org.springframework.web.util.UriComponents;
|
||||
public class ForwardedHeaderTransformer implements Function<ServerHttpRequest, ServerHttpRequest> {
|
||||
|
||||
static final Set<String> FORWARDED_HEADER_NAMES =
|
||||
Collections.newSetFromMap(new LinkedCaseInsensitiveMap<>(10, Locale.ENGLISH));
|
||||
Collections.newSetFromMap(new LinkedCaseInsensitiveMap<>(10, Locale.ROOT));
|
||||
|
||||
static {
|
||||
FORWARDED_HEADER_NAMES.add("Forwarded");
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.web.util;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
@@ -84,7 +85,7 @@ public class DisconnectedClientHelper {
|
||||
public static boolean isClientDisconnectedException(Throwable ex) {
|
||||
String message = NestedExceptionUtils.getMostSpecificCause(ex).getMessage();
|
||||
if (message != null) {
|
||||
String text = message.toLowerCase();
|
||||
String text = message.toLowerCase(Locale.ROOT);
|
||||
for (String phrase : EXCEPTION_PHRASES) {
|
||||
if (text.contains(phrase)) {
|
||||
return true;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -18,6 +18,7 @@ package org.springframework.web.util;
|
||||
|
||||
import java.net.URLDecoder;
|
||||
import java.nio.charset.UnsupportedCharsetException;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
@@ -629,7 +630,7 @@ public class UrlPathHelper {
|
||||
|
||||
private String removeJsessionid(String requestUri) {
|
||||
String key = ";jsessionid=";
|
||||
int index = requestUri.toLowerCase().indexOf(key);
|
||||
int index = requestUri.toLowerCase(Locale.ROOT).indexOf(key);
|
||||
if (index == -1) {
|
||||
return requestUri;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user