Remove unnecessary query parameter encoding check by assuming decoded parameters from serverRequest

Signed-off-by: raccoonback <kosb15@naver.com>
This commit is contained in:
raccoonback
2025-05-14 23:57:21 +09:00
parent 107e8d36bf
commit 5fe6ed55a9

View File

@@ -87,7 +87,7 @@ public class ProxyExchangeHandlerFunction
@Override
public ServerResponse handle(ServerRequest serverRequest) {
URI uri = uriResolver.apply(serverRequest);
MultiValueMap<String, String> params = ensureEncodedQueryParameters(serverRequest);
MultiValueMap<String, String> params = MvcUtils.encodeQueryParams(serverRequest.params());
// @formatter:off
URI url = UriComponentsBuilder.fromUri(serverRequest.uri())
.scheme(uri.getScheme())
@@ -134,38 +134,6 @@ public class ProxyExchangeHandlerFunction
return filtered;
}
private static MultiValueMap<String, String> ensureEncodedQueryParameters(ServerRequest serverRequest) {
boolean encoded = containsEncodedQuery(serverRequest.uri(), serverRequest.params());
MultiValueMap<String, String> params = serverRequest.params();
if (!encoded) {
params = MvcUtils.encodeQueryParams(serverRequest.params());
}
return params;
}
private static boolean containsEncodedQuery(URI uri, MultiValueMap<String, String> params) {
String rawQuery = uri.getRawQuery();
boolean encoded = (rawQuery != null && rawQuery.contains("%"))
|| (uri.getRawPath() != null && uri.getRawPath().contains("%"));
// Verify if it is really fully encoded. Treat partial encoded as unencoded.
if (encoded) {
try {
UriComponentsBuilder.fromUri(uri).replaceQueryParams(params).build(true);
return true;
}
catch (IllegalArgumentException ignored) {
if (log.isTraceEnabled()) {
log.trace("Error in containsEncodedParts", ignored);
}
}
return false;
}
return false;
}
public interface URIResolver extends Function<ServerRequest, URI> {
}