This is an automated email from the ASF dual-hosted git repository.
xiaoyu 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 4ba581d0e [ISSUE #3870] fix request plugin can't replaceCookie (#3872)
4ba581d0e is described below
commit 4ba581d0e63edbbc4d5ddd1dfe9748724583bf92
Author: Jairo <[email protected]>
AuthorDate: Mon Aug 29 15:28:57 2022 +0800
[ISSUE #3870] fix request plugin can't replaceCookie (#3872)
---
.../shenyu/plugin/request/RequestPlugin.java | 3 ++-
.../shenyu/plugin/request/RequestPluginTest.java | 23 ++++++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
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 7253e770f..94e9f5618 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
@@ -187,8 +187,9 @@ public class RequestPlugin extends AbstractShenyuPlugin {
private void replaceCookieKey(final Map.Entry<String, String>
shenyuCookie, final MultiValueMap<String, HttpCookie> cookies) {
List<HttpCookie> httpCookies = cookies.get(shenyuCookie.getKey());
if (Objects.nonNull(httpCookies)) {
- cookies.addAll(shenyuCookie.getValue(), httpCookies);
cookies.remove(shenyuCookie.getKey());
+ List<HttpCookie> newKeyCookieList =
httpCookies.stream().filter(Objects::nonNull).map(cookie -> new
HttpCookie(shenyuCookie.getValue(),
cookie.getValue())).collect(Collectors.toList());
+ cookies.addAll(shenyuCookie.getValue(), newKeyCookieList);
}
}
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 746067495..95efbec00 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
@@ -18,6 +18,9 @@
package org.apache.shenyu.plugin.request;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import org.apache.commons.collections4.ListUtils;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.shenyu.common.dto.RuleData;
import org.apache.shenyu.common.dto.SelectorData;
import org.apache.shenyu.common.dto.convert.rule.RequestHandle;
@@ -41,11 +44,16 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.mock.http.server.reactive.MockServerHttpRequest;
import org.springframework.mock.web.server.MockServerWebExchange;
+import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -129,6 +137,12 @@ public class RequestPluginTest {
assertFalse(httpHeaders.containsKey("removeKey"));
assertTrue(httpHeaders.containsKey(HttpHeaders.COOKIE));
+ LinkedMultiValueMap<String, String> cookies =
getCookieMapFromHeader(httpHeaders);
+ assertTrue(checkMapSizeAndEqualVal(cookies, "addKey", "addValue"));
+ 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"));
@@ -150,6 +164,15 @@ public class RequestPluginTest {
return value.equals(headersOrParams.get(key).get(0));
}
+ private LinkedMultiValueMap<String, String> getCookieMapFromHeader(final
HttpHeaders httpHeaders) {
+ List<String> cookies = httpHeaders.get(HttpHeaders.COOKIE);
+ return new
LinkedMultiValueMap<>(ListUtils.emptyIfNull(cookies).stream().map(cookiePair ->
cookiePair.split(";"))
+ .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)));
+ }
+
@Test
public void testGetOrder() {
assertEquals(this.requestPlugin.getOrder(),
PluginEnum.REQUEST.getCode());