From c3d281009167814da53ebdc44c7b65f6fc9db8dc Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期四, 05 三月 2026 21:03:58 +0800
Subject: [PATCH] fix:管理后台车辆管理模块
---
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