From 999e0159112d9405bad7fcd839b339e006a3530d Mon Sep 17 00:00:00 2001
From: wenminjie <1036699586@qq.com>
Date: 星期三, 15 七月 2026 15:07:07 +0800
Subject: [PATCH] 修复了已知的BUG
---
ruoyi-common/src/main/java/com/ruoyi/common/filter/SmCryptoFilter.java | 22 ++++++++++++++++++----
1 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/SmCryptoFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/SmCryptoFilter.java
index 7785b4c..157f540 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/filter/SmCryptoFilter.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/SmCryptoFilter.java
@@ -12,6 +12,7 @@
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import java.rmi.ServerException;
public class SmCryptoFilter implements Filter {
@@ -24,6 +25,12 @@
HttpServletResponse httpResponse = (HttpServletResponse) response;
try {
+ // 设置请求和响应的编码为 UTF-8
+ request.setCharacterEncoding("UTF-8");
+ response.setCharacterEncoding("UTF-8");
+ response.setContentType("application/json;charset=UTF-8");
+
+
// 对请求进行解密
String decryptedRequestBody = decryptRequest(httpRequest);
// 处理解密后的请求体 CustomRequestWrapper为自定义请求包装器,请看下面实现
@@ -35,7 +42,8 @@
// 获取并加密响应内容
byte[] content = responseWrapper.getContentAsByteArray();
- String originalResponseBody = new String(content);
+ String originalResponseBody = new String(content, StandardCharsets.UTF_8); // 关键修改
+// String originalResponseBody = new String(content);
String encryptedResponseBody = encryptResponse(originalResponseBody);
responseWrapper.setContentType("application/json");
JSONObject result = new JSONObject();
@@ -66,12 +74,18 @@
* @throws IOException 如果读取或解密过程中发生错误
*/
private String decryptRequest(HttpServletRequest request) throws IOException {
+ // 先设置编码
+ request.setCharacterEncoding("UTF-8");
+
StringBuilder jb = new StringBuilder();
String line;
- BufferedReader reader = request.getReader();
- while ((line = reader.readLine()) != null) {
- jb.append(line);
+ // 直接使用getReader(),此时应该使用UTF-8
+ try (BufferedReader reader = request.getReader()) {
+ while ((line = reader.readLine()) != null) {
+ jb.append(line);
+ }
}
+
try {
return Sm4Utils.sm4DecryptUtil(jb.toString());
} catch (Exception e) {
--
Gitblit v1.7.1