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 64fe1e32aa fix(request): check response header deduplication strategy
(#7230)
64fe1e32aa is described below
commit 64fe1e32aa064dfffd122bbcbb60f88381bb9d18
Author: Liming Deng <[email protected]>
AuthorDate: Wed Sep 30 12:11:33 2026 +0800
fix(request): check response header deduplication strategy (#7230)
---
.../shenyu/plugin/request/RequestPlugin.java | 2 +-
.../shenyu/plugin/request/RequestPluginTest.java | 29 ++++++++++++++++++++++
2 files changed, 30 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 34d647a9be..ee95120693 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
@@ -67,7 +67,7 @@ public class RequestPlugin extends AbstractShenyuPlugin {
exchange.getAttributes().put(UniqueHeaderEnum.REQ_UNIQUE_HEADER.getStrategy(),
requestHandle.getRequestHeaderUniqueStrategy());
exchange.getAttributes().put(UniqueHeaderEnum.REQ_UNIQUE_HEADER.getName(),
requestHandle.getRequestUniqueHeaders());
}
- if (Objects.nonNull(requestHandle.getRequestHeaderUniqueStrategy()) &&
StringUtils.isNotEmpty(requestHandle.getRespUniqueHeaders())) {
+ if (Objects.nonNull(requestHandle.getRespHeaderUniqueStrategy()) &&
StringUtils.isNotEmpty(requestHandle.getRespUniqueHeaders())) {
exchange.getAttributes().put(UniqueHeaderEnum.RESP_UNIQUE_HEADER.getStrategy(),
requestHandle.getRespHeaderUniqueStrategy());
exchange.getAttributes().put(UniqueHeaderEnum.RESP_UNIQUE_HEADER.getName(),
requestHandle.getRespUniqueHeaders());
}
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 4bcacfb2c2..173a4056c8 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
@@ -28,6 +28,8 @@ import
org.apache.shenyu.common.dto.convert.rule.RequestHandle.ShenyuCookie;
import
org.apache.shenyu.common.dto.convert.rule.RequestHandle.ShenyuRequestHeader;
import
org.apache.shenyu.common.dto.convert.rule.RequestHandle.ShenyuRequestParameter;
import org.apache.shenyu.common.enums.PluginEnum;
+import org.apache.shenyu.common.enums.UniqueHeaderEnum;
+import org.apache.shenyu.common.enums.HeaderUniqueStrategyEnum;
import org.apache.shenyu.plugin.api.ShenyuPluginChain;
import org.apache.shenyu.plugin.base.utils.CacheKeyUtils;
import org.apache.shenyu.plugin.request.handler.RequestPluginHandler;
@@ -120,6 +122,33 @@ public class RequestPluginTest {
RequestPluginHandler.CACHED_HANDLE.get().cachedHandle(CacheKeyUtils.INST.getKey(this.ruleData),
requestHandle);
}
+ @Test
+ public void testResponseDedupDoesNotRequireRequestStrategy() {
+ RequestHandle handle =
RequestPluginHandler.CACHED_HANDLE.get().obtainHandle(CacheKeyUtils.INST.getKey(ruleData));
+ handle.setRequestHeaderUniqueStrategy(null);
+
handle.setRespHeaderUniqueStrategy(HeaderUniqueStrategyEnum.RETAIN_FIRST);
+ handle.setRespUniqueHeaders("X-Response");
+ when(chain.execute(any())).thenReturn(Mono.empty());
+
+ StepVerifier.create(requestPlugin.doExecute(exchange, chain, new
SelectorData(), ruleData)).verifyComplete();
+
+ assertEquals(HeaderUniqueStrategyEnum.RETAIN_FIRST,
exchange.getAttribute(UniqueHeaderEnum.RESP_UNIQUE_HEADER.getStrategy()));
+ assertEquals("X-Response",
exchange.getAttribute(UniqueHeaderEnum.RESP_UNIQUE_HEADER.getName()));
+ }
+
+ @Test
+ public void testNullResponseDedupStrategyIsIgnored() {
+ RequestHandle handle =
RequestPluginHandler.CACHED_HANDLE.get().obtainHandle(CacheKeyUtils.INST.getKey(ruleData));
+ handle.setRespHeaderUniqueStrategy(null);
+ handle.setRespUniqueHeaders("X-Response");
+ when(chain.execute(any())).thenReturn(Mono.empty());
+
+ StepVerifier.create(requestPlugin.doExecute(exchange, chain, new
SelectorData(), ruleData)).verifyComplete();
+
+
assertFalse(exchange.getAttributes().containsKey(UniqueHeaderEnum.RESP_UNIQUE_HEADER.getStrategy()));
+
assertFalse(exchange.getAttributes().containsKey(UniqueHeaderEnum.RESP_UNIQUE_HEADER.getName()));
+ }
+
@Test
public void testDoExecute() {
SelectorData selectorData = mock(SelectorData.class);