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

liuhongyu 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 d14a4238dc fix 'addCustomHeaders' header value replace bug (#6257)
d14a4238dc is described below

commit d14a4238dc4710a9dc48f87804e7ac621c9bee19
Author: MaMengzhen <[email protected]>
AuthorDate: Wed Dec 17 10:04:10 2025 +0800

    fix 'addCustomHeaders' header value replace bug (#6257)
    
    Co-authored-by: aias00 <[email protected]>
    Co-authored-by: loongs-zhang <[email protected]>
---
 .../mcp/server/callback/ShenyuToolCallback.java      | 20 +++++++++++++++-----
 .../plugin/mcp/server/request/RequestConfig.java     | 13 ++++++++++++-
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git 
a/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/callback/ShenyuToolCallback.java
 
b/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/callback/ShenyuToolCallback.java
index 10839c9f39..3620519116 100644
--- 
a/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/callback/ShenyuToolCallback.java
+++ 
b/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/callback/ShenyuToolCallback.java
@@ -346,7 +346,7 @@ public class ShenyuToolCallback implements ToolCallback {
         // Build body with parameter formatting (only format body parameters 
that need it)
         final JsonObject bodyJson = buildFormattedBodyJson(argsToJsonBody, 
argsPosition, inputJson);
 
-        return new RequestConfig(method, path, bodyJson, requestTemplate, 
argsToJsonBody);
+        return new RequestConfig(method, path, bodyJson, requestTemplate, 
argsToJsonBody, inputJson);
     }
 
     /**
@@ -470,10 +470,20 @@ public class ShenyuToolCallback implements ToolCallback {
         if (requestConfig.getRequestTemplate().has("headers")) {
             for (final var headerElem : 
requestConfig.getRequestTemplate().getAsJsonArray("headers")) {
                 final JsonObject headerObj = headerElem.getAsJsonObject();
-                requestBuilder.header(
-                        headerObj.get("key").getAsString(),
-                        headerObj.get("value").getAsString()
-                );
+                String headerKey = headerObj.get("key").getAsString();
+                String headerValue = headerObj.get("value").getAsString();
+                if (headerValue.contains("{{.")) {
+                    JsonObject inputJson = requestConfig.getInputJson();
+                    if (Objects.nonNull(inputJson)) {
+                        for (String key : inputJson.keySet()) {
+                            if (inputJson.get(key).isJsonPrimitive() && 
inputJson.get(key).getAsJsonPrimitive().isString()) {
+                                String value = 
inputJson.get(key).getAsString();
+                                headerValue = headerValue.replace("{{." + key 
+ "}}", value);
+                            }
+                        }
+                    }
+                }
+                requestBuilder.header(headerKey, headerValue);
             }
         }
     }
diff --git 
a/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/request/RequestConfig.java
 
b/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/request/RequestConfig.java
index 2b5da8b830..d6621c3245 100644
--- 
a/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/request/RequestConfig.java
+++ 
b/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/request/RequestConfig.java
@@ -30,13 +30,16 @@ public class RequestConfig {
     private JsonObject requestTemplate;
     
     private boolean argsToJsonBody;
+
+    private JsonObject inputJson;
     
-    public RequestConfig(final String method, final String path, final 
JsonObject bodyJson, final JsonObject requestTemplate, final boolean 
argsToJsonBody) {
+    public RequestConfig(final String method, final String path, final 
JsonObject bodyJson, final JsonObject requestTemplate, final boolean 
argsToJsonBody, final JsonObject inputJson) {
         this.method = method;
         this.path = path;
         this.bodyJson = bodyJson;
         this.requestTemplate = requestTemplate;
         this.argsToJsonBody = argsToJsonBody;
+        this.inputJson = inputJson;
     }
     
     public String getMethod() {
@@ -78,4 +81,12 @@ public class RequestConfig {
     public void setArgsToJsonBody(final boolean argsToJsonBody) {
         this.argsToJsonBody = argsToJsonBody;
     }
+
+    public JsonObject getInputJson() {
+        return inputJson;
+    }
+
+    public void setInputJson(final JsonObject inputJson) {
+        this.inputJson = inputJson;
+    }
 }

Reply via email to