From 12fa425ef24ec9a91b5bcb23a07de55c0e9e8764 Mon Sep 17 00:00:00 2001 From: Lulu Date: Fri, 8 Mar 2024 23:44:29 +0800 Subject: [PATCH] fix: combine the form map and queryParams to pass to RequestWrapper (#3249) * fix: combine the form map and queryParams to pass to RequestWrapper Fixes #3244 --- .../cloud/gateway/server/mvc/filter/FormFilter.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/FormFilter.java b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/FormFilter.java index 9191f5ae..4affbee3 100644 --- a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/FormFilter.java +++ b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/FormFilter.java @@ -24,6 +24,7 @@ import java.io.Writer; import java.net.URLEncoder; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Enumeration; @@ -48,6 +49,7 @@ import org.springframework.core.Ordered; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.lang.Nullable; +import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.StringUtils; import org.springframework.web.util.UriComponentsBuilder; @@ -151,9 +153,15 @@ public class FormFilter implements Filter, Ordered { } writer.flush(); + MultiValueMap combineQueryParams = new LinkedMultiValueMap<>(); + for (Map.Entry entry : form.entrySet()) { + combineQueryParams.put(entry.getKey(), new ArrayList<>(Arrays.asList(entry.getValue()))); + } + combineQueryParams.addAll(queryParams); + ByteArrayServletInputStream servletInputStream = new ByteArrayServletInputStream( new ByteArrayInputStream(bos.toByteArray())); - return new FormContentRequestWrapper(request, queryParams) { + return new FormContentRequestWrapper(request, combineQueryParams) { @Override public ServletInputStream getInputStream() throws IOException { return servletInputStream;