diff --git a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/request/AiRequestTransformerPlugin.java b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/request/AiRequestTransformerPlugin.java index 0dc6b3bcfb10..129c80e54f95 100644 --- a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/request/AiRequestTransformerPlugin.java +++ b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/request/AiRequestTransformerPlugin.java @@ -55,6 +55,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -65,6 +66,10 @@ public class AiRequestTransformerPlugin extends AbstractShenyuPlugin { private static final Logger LOG = LoggerFactory.getLogger(AiRequestTransformerPlugin.class); + private static final Pattern REQUEST_LINE_PATTERN = Pattern.compile("^(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD)\\s.*\\sHTTP/1.1$"); + + private static final Pattern REQUEST_PATH_PATTERN = Pattern.compile("^/[a-zA-Z0-9/_\\-]*$"); + private final List> messageReaders; private final AiModelFactoryRegistry aiModelFactoryRegistry; @@ -247,7 +252,7 @@ private static Mono rewriteRequestPath(final ServerWebExchang return Mono.just(exchange); } - if (!newPath.matches("^/[a-zA-Z0-9/_\\-]*$")) { + if (!REQUEST_PATH_PATTERN.matcher(newPath).matches()) { LOG.warn("Extracted path contains invalid characters: {}, Will continue to use the original path.", newPath); return Mono.just(exchange); } @@ -283,7 +288,7 @@ static HttpHeaders extractHeadersFromAiResponse(final String aiResponse) { boolean headerSectionStarted = false; while (Objects.nonNull(line = reader.readLine())) { if (!headerSectionStarted) { - if (line.startsWith("HTTP/1.1") || line.matches("^(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD)\\s.*\\sHTTP/1.1$")) { + if (line.startsWith("HTTP/1.1") || REQUEST_LINE_PATTERN.matcher(line).matches()) { headerSectionStarted = true; continue; } diff --git a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/response/AiResponseTransformerPlugin.java b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/response/AiResponseTransformerPlugin.java index 8718bc1b3b09..d7946a3ec69f 100644 --- a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/response/AiResponseTransformerPlugin.java +++ b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/response/AiResponseTransformerPlugin.java @@ -57,6 +57,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.zip.GZIPInputStream; @@ -72,6 +73,8 @@ public class AiResponseTransformerPlugin extends AbstractShenyuPlugin { private static final Logger LOG = LoggerFactory.getLogger(AiResponseTransformerPlugin.class); + private static final Pattern REQUEST_LINE_PATTERN = Pattern.compile("^(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD)\\s.*\\sHTTP/1.1$"); + private final List> messageReaders; private final AiModelFactoryRegistry aiModelFactoryRegistry; @@ -259,7 +262,7 @@ static HttpHeaders extractHeadersFromAiResponse(final String aiResponse) { boolean headerSectionStarted = false; while (Objects.nonNull(line = reader.readLine())) { if (!headerSectionStarted) { - if (line.startsWith("HTTP/1.1") || line.matches("^(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD)\\s.*\\sHTTP/1.1$")) { + if (line.startsWith("HTTP/1.1") || REQUEST_LINE_PATTERN.matcher(line).matches()) { headerSectionStarted = true; continue; }