From de5f07fe1acd8d462f9c54d7a04c5c47a87264d1 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期六, 07 三月 2026 21:01:24 +0800
Subject: [PATCH] 修改bug

---
 xp-robotaxi-gateway-boot/src/main/java/com/xiaopeng/gateway/filter/RequestParamGlobalFilter.java |   31 ++++++++++++++++++++++++-------
 1 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/xp-robotaxi-gateway-boot/src/main/java/com/xiaopeng/gateway/filter/RequestParamGlobalFilter.java b/xp-robotaxi-gateway-boot/src/main/java/com/xiaopeng/gateway/filter/RequestParamGlobalFilter.java
index b7d3dce..e21c05c 100644
--- a/xp-robotaxi-gateway-boot/src/main/java/com/xiaopeng/gateway/filter/RequestParamGlobalFilter.java
+++ b/xp-robotaxi-gateway-boot/src/main/java/com/xiaopeng/gateway/filter/RequestParamGlobalFilter.java
@@ -10,14 +10,13 @@
 import org.springframework.core.io.buffer.*;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
 import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
 import org.springframework.stereotype.Component;
 import org.springframework.web.server.ServerWebExchange;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
-
-import java.nio.charset.StandardCharsets;
 
 /**
  * 跨站脚本过滤器
@@ -44,10 +43,30 @@
 		if(method != HttpMethod.POST){
 			return chain.filter(exchange);
 		}
+		String contentType = request.getHeaders().getFirst(HttpHeaders.CONTENT_TYPE);
+		// multipart(二进制)请求禁止读取/重写body,否则会导致文件内容损坏
+		if (StringUtils.isNotEmpty(contentType) && StringUtils.startsWithIgnoreCase(contentType, "multipart/")) {
+			return chain.filter(exchange);
+		}
+		// 非JSON请求不处理,避免误伤其他content-type
+		if (!isJsonContentType(contentType)) {
+			return chain.filter(exchange);
+		}
 		ServerHttpRequestDecorator httpRequestDecorator = requestDecorator(exchange);
 		return chain.filter(exchange.mutate().request(httpRequestDecorator).build());
 	}
-	
+
+	private boolean isJsonContentType(String contentType) {
+		if (StringUtils.isEmpty(contentType)) {
+			return false;
+		}
+		if (StringUtils.startsWithIgnoreCase(contentType, MediaType.APPLICATION_JSON_VALUE)) {
+			return true;
+		}
+		// 兼容 application/*+json
+		return StringUtils.containsIgnoreCase(contentType, "+json");
+	}
+
 	
 	private ServerHttpRequestDecorator requestDecorator(ServerWebExchange exchange) {
 		ServerHttpRequestDecorator serverHttpRequestDecorator = new ServerHttpRequestDecorator(exchange.getRequest()) {
@@ -60,12 +79,10 @@
 					byte[] content = new byte[join.readableByteCount()];
 					join.read(content);
 					DataBufferUtils.release(join);
-					String bodyStr = new String(content, StandardCharsets.UTF_8);
 					// 转成字节
-					byte[] bytes = bodyStr.getBytes();
 					NettyDataBufferFactory nettyDataBufferFactory = new NettyDataBufferFactory(ByteBufAllocator.DEFAULT);
-					DataBuffer buffer = nettyDataBufferFactory.allocateBuffer(bytes.length);
-					buffer.write(bytes);
+					DataBuffer buffer = nettyDataBufferFactory.allocateBuffer(content.length);
+					buffer.write(content);
 					return buffer;
 				});
 			}

--
Gitblit v1.7.1