This is an automated email from the ASF dual-hosted git repository.

Aias00 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new 3be50376da fix(request): make add operations append existing values 
(#6375)
3be50376da is described below

commit 3be50376da5904f6c9195cf7670285a4bb019065
Author: SouthwestAsiaFloat <[email protected]>
AuthorDate: Fri Jun 12 23:25:26 2026 +0800

    fix(request): make add operations append existing values (#6375)
    
    Co-authored-by: 西南亚瓢 <[email protected]>
    Co-authored-by: aias00 <[email protected]>
---
 .../shenyu/plugin/request/RequestPlugin.java       | 36 +++++++++++++++-------
 .../shenyu/plugin/request/RequestPluginTest.java   | 14 ++++++---
 2 files changed, 35 insertions(+), 15 deletions(-)

diff --git 
a/shenyu-plugin/shenyu-plugin-request/src/main/java/org/apache/shenyu/plugin/request/RequestPlugin.java
 
b/shenyu-plugin/shenyu-plugin-request/src/main/java/org/apache/shenyu/plugin/request/RequestPlugin.java
index 0d3cef6a5e..34d647a9be 100644
--- 
a/shenyu-plugin/shenyu-plugin-request/src/main/java/org/apache/shenyu/plugin/request/RequestPlugin.java
+++ 
b/shenyu-plugin/shenyu-plugin-request/src/main/java/org/apache/shenyu/plugin/request/RequestPlugin.java
@@ -123,10 +123,10 @@ public class RequestPlugin extends AbstractShenyuPlugin {
             return;
         }
         if (MapUtils.isNotEmpty(shenyuReqHeader.getAddHeaders())) {
-            shenyuReqHeader.getAddHeaders().entrySet().forEach(s -> 
this.fillHeader(s, headers));
+            shenyuReqHeader.getAddHeaders().entrySet().forEach(s -> 
this.addHeader(s, headers));
         }
         if (MapUtils.isNotEmpty(shenyuReqHeader.getSetHeaders())) {
-            shenyuReqHeader.getSetHeaders().entrySet().forEach(s -> 
this.fillHeader(s, headers));
+            shenyuReqHeader.getSetHeaders().entrySet().forEach(s -> 
this.setHeader(s, headers));
         }
         if (MapUtils.isNotEmpty(shenyuReqHeader.getReplaceHeaderKeys())) {
             shenyuReqHeader.getReplaceHeaderKeys().entrySet().forEach(s -> 
this.replaceHeaderKey(s, headers));
@@ -145,15 +145,16 @@ public class RequestPlugin extends AbstractShenyuPlugin {
      */
     private MultiValueMap<String, HttpCookie> getCookies(final 
ServerHttpRequest request, final RequestHandle requestHandle) {
         RequestHandle.ShenyuCookie shenyuCookie = requestHandle.getCookie();
-        MultiValueMap<String, HttpCookie> cookies = new 
LinkedMultiValueMap<>(request.getCookies());
+        MultiValueMap<String, HttpCookie> cookies = new 
LinkedMultiValueMap<>();
+        cookies.addAll(request.getCookies());
         if (Objects.isNull(shenyuCookie)) {
             return cookies;
         }
         if (MapUtils.isNotEmpty(shenyuCookie.getAddCookies())) {
-            shenyuCookie.getAddCookies().entrySet().forEach(s -> 
this.fillCookie(s, cookies));
+            shenyuCookie.getAddCookies().entrySet().forEach(s -> 
this.addCookie(s, cookies));
         }
         if (MapUtils.isNotEmpty(shenyuCookie.getSetCookies())) {
-            shenyuCookie.getSetCookies().entrySet().forEach(s -> 
this.fillCookie(s, cookies));
+            shenyuCookie.getSetCookies().entrySet().forEach(s -> 
this.setCookie(s, cookies));
         }
         if (MapUtils.isNotEmpty(shenyuCookie.getReplaceCookieKeys())) {
             shenyuCookie.getReplaceCookieKeys().entrySet().forEach(s -> 
this.replaceCookieKey(s, cookies));
@@ -173,15 +174,16 @@ public class RequestPlugin extends AbstractShenyuPlugin {
      */
     private MultiValueMap<String, String> getQueryParams(final 
ServerHttpRequest request, final RequestHandle requestHandle) {
         RequestHandle.ShenyuRequestParameter shenyuReqParameter = 
requestHandle.getParameter();
-        MultiValueMap<String, String> queryParams = new 
LinkedMultiValueMap<>(request.getQueryParams());
+        MultiValueMap<String, String> queryParams = new 
LinkedMultiValueMap<>();
+        queryParams.addAll(request.getQueryParams());
         if (Objects.isNull(shenyuReqParameter)) {
             return queryParams;
         }
         if (MapUtils.isNotEmpty(shenyuReqParameter.getAddParameters())) {
-            shenyuReqParameter.getAddParameters().entrySet().forEach(s -> 
this.fillParameter(s, queryParams));
+            shenyuReqParameter.getAddParameters().entrySet().forEach(s -> 
this.addParameter(s, queryParams));
         }
         if (MapUtils.isNotEmpty(shenyuReqParameter.getSetParameters())) {
-            shenyuReqParameter.getSetParameters().entrySet().forEach(s -> 
this.fillParameter(s, queryParams));
+            shenyuReqParameter.getSetParameters().entrySet().forEach(s -> 
this.setParameter(s, queryParams));
         }
         if (MapUtils.isNotEmpty(shenyuReqParameter.getReplaceParameterKeys())) 
{
             shenyuReqParameter.getReplaceParameterKeys().entrySet().forEach(s 
-> this.replaceParameterKey(s, queryParams));
@@ -200,7 +202,11 @@ public class RequestPlugin extends AbstractShenyuPlugin {
         }
     }
 
-    private void fillParameter(final Map.Entry<String, String> shenyuParam, 
final MultiValueMap<String, String> queryParams) {
+    private void addParameter(final Map.Entry<String, String> shenyuParam, 
final MultiValueMap<String, String> queryParams) {
+        queryParams.add(shenyuParam.getKey(), shenyuParam.getValue());
+    }
+
+    private void setParameter(final Map.Entry<String, String> shenyuParam, 
final MultiValueMap<String, String> queryParams) {
         queryParams.set(shenyuParam.getKey(), shenyuParam.getValue());
     }
 
@@ -213,7 +219,11 @@ public class RequestPlugin extends AbstractShenyuPlugin {
         }
     }
 
-    private void fillCookie(final Map.Entry<String, String> shenyuCookie, 
final MultiValueMap<String, HttpCookie> cookies) {
+    private void addCookie(final Map.Entry<String, String> shenyuCookie, final 
MultiValueMap<String, HttpCookie> cookies) {
+        cookies.add(shenyuCookie.getKey(), new 
HttpCookie(shenyuCookie.getKey(), shenyuCookie.getValue()));
+    }
+
+    private void setCookie(final Map.Entry<String, String> shenyuCookie, final 
MultiValueMap<String, HttpCookie> cookies) {
         cookies.set(shenyuCookie.getKey(), new 
HttpCookie(shenyuCookie.getKey(), shenyuCookie.getValue()));
     }
 
@@ -225,7 +235,11 @@ public class RequestPlugin extends AbstractShenyuPlugin {
         }
     }
 
-    private void fillHeader(final Map.Entry<String, String> shenyuHeader, 
final HttpHeaders headers) {
+    private void addHeader(final Map.Entry<String, String> shenyuHeader, final 
HttpHeaders headers) {
+        headers.add(shenyuHeader.getKey(), shenyuHeader.getValue());
+    }
+
+    private void setHeader(final Map.Entry<String, String> shenyuHeader, final 
HttpHeaders headers) {
         headers.set(shenyuHeader.getKey(), shenyuHeader.getValue());
     }
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-request/src/test/java/org/apache/shenyu/plugin/request/RequestPluginTest.java
 
b/shenyu-plugin/shenyu-plugin-request/src/test/java/org/apache/shenyu/plugin/request/RequestPluginTest.java
index 95efbec00b..4bcacfb2c2 100644
--- 
a/shenyu-plugin/shenyu-plugin-request/src/test/java/org/apache/shenyu/plugin/request/RequestPluginTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-request/src/test/java/org/apache/shenyu/plugin/request/RequestPluginTest.java
@@ -81,12 +81,15 @@ public class RequestPluginTest {
     public void setup() {
         this.exchange = MockServerWebExchange.from(MockServerHttpRequest
                 .get("localhost")
+                .cookie(new HttpCookie("addKey", "oldValue"))
                 .cookie(new HttpCookie("replaceKey", "oldValue"))
                 .cookie(new HttpCookie("removeKey", "value"))
                 .cookie(new HttpCookie("setKey", "oldValue"))
+                .header("addKey", "oldValue")
                 .header("replaceKey", "oldValue")
                 .header("removeKey", "value")
                 .header("setKey", "oldValue")
+                .queryParam("addKey", "oldValue")
                 .queryParam("replaceKey", "oldValue")
                 .queryParam("removeKey", "value")
                 .queryParam("setKey", "oldValue")
@@ -131,21 +134,21 @@ public class RequestPluginTest {
         assertNotNull(request);
         HttpHeaders httpHeaders = request.getHeaders();
         assertNotNull(httpHeaders);
-        assertTrue(checkMapSizeAndEqualVal(httpHeaders, "addKey", "addValue"));
+        assertEquals(Arrays.asList("oldValue", "addValue"), 
httpHeaders.get("addKey"));
         assertTrue(checkMapSizeAndEqualVal(httpHeaders, "newKey", "oldValue"));
         assertTrue(checkMapSizeAndEqualVal(httpHeaders, "setKey", "newValue"));
         assertFalse(httpHeaders.containsKey("removeKey"));
         assertTrue(httpHeaders.containsKey(HttpHeaders.COOKIE));
 
         LinkedMultiValueMap<String, String> cookies = 
getCookieMapFromHeader(httpHeaders);
-        assertTrue(checkMapSizeAndEqualVal(cookies, "addKey", "addValue"));
+        assertEquals(Arrays.asList("oldValue", "addValue"), 
cookies.get("addKey"));
         assertTrue(checkMapSizeAndEqualVal(cookies, "newKey", "oldValue"));
         assertTrue(checkMapSizeAndEqualVal(cookies, "setKey", "newValue"));
         assertFalse(cookies.containsKey("removeKey"));
 
         MultiValueMap<String, String> queryParams = request.getQueryParams();
         assertNotNull(queryParams);
-        assertTrue(checkMapSizeAndEqualVal(queryParams, "addKey", "addValue"));
+        assertEquals(Arrays.asList("oldValue", "addValue"), 
queryParams.get("addKey"));
         assertTrue(checkMapSizeAndEqualVal(queryParams, "newKey", "oldValue"));
         assertTrue(checkMapSizeAndEqualVal(queryParams, "setKey", "newValue"));
         assertFalse(queryParams.containsKey("removeKey"));
@@ -170,7 +173,10 @@ public class RequestPluginTest {
                 .flatMap(s ->
                         Arrays.stream(s).filter(cookie -> 
cookie.split("=").length == 2)
                                 .map(cookie -> 
Pair.of(cookie.split("=")[0].trim(), 
Lists.newArrayList(cookie.split("=")[1].trim()))))
-                .collect(Collectors.toMap(Pair::getKey, Pair::getValue, (k, v) 
-> k)));
+                .collect(Collectors.toMap(Pair::getKey, Pair::getValue, 
(current, added) -> {
+                    current.addAll(added);
+                    return current;
+                })));
     }
 
     @Test

Reply via email to