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