李学强 5 месяцев назад
Родитель
Сommit
fbc0f15478

+ 48 - 14
kxs-system/src/main/java/com/kxs/system/biz/filter/RequestDecoderFilter.java

@@ -1,6 +1,8 @@
 package com.kxs.system.biz.filter;
 
 import cn.hutool.crypto.symmetric.AES;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.kxs.system.biz.config.AesConfigProperties;
 import com.kxs.common.core.constant.CommonConstants;
@@ -23,7 +25,9 @@ import java.io.IOException;
 import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
 import java.util.Base64;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -96,7 +100,9 @@ public class RequestDecoderFilter implements Filter {
             if (encryptedValue != null) {
                 byte[] decode = Base64.getMimeDecoder().decode(encryptedValue);
                 String decryptedValue = cryptoAes.decryptStr(new String(decode));
-                request = new ParameterDecodedRequest(request, decryptedValue);
+                //解密后的格式为{"roleId": "1"},把转换为get所需参数
+                JSONObject decryptJson = JSON.parseObject(decryptedValue);
+                request = new ParameterDecodedRequest(request, decryptJson);
             }
             return request;
         } catch (Exception e) {
@@ -119,14 +125,6 @@ public class RequestDecoderFilter implements Filter {
                 String newURI = lastSegment + decryptedValue;
                 request = new PathDecodedRequest(request, newURI, decryptedValue);
             }
-
-
-//            Matcher matcher = DELETE_PATH_PATTERN.matcher(requestURI);
-//            if (matcher.find()) {
-//                String encryptedValue = matcher.group(2);
-//                String newURI = requestURI.replace("{" + encryptedValue + "}", decryptedValue);
-//                request = new PathDecodedRequest(request, newURI, decryptedValue);
-//            }
             return request;
         } catch (Exception e) {
             throw new AesDecodeException(e.getMessage());
@@ -195,20 +193,56 @@ public class RequestDecoderFilter implements Filter {
     }
 
     static class ParameterDecodedRequest extends HttpServletRequestWrapper {
-        private final String decryptedValue;
+        private final Map<String, String> decryptedParams;
 
-        public ParameterDecodedRequest(HttpServletRequest request, String decryptedValue) {
+        public ParameterDecodedRequest(HttpServletRequest request, JSONObject decryptJson) {
             super(request);
-            this.decryptedValue = decryptedValue;
+            this.decryptedParams = new HashMap<>();
+            if (decryptJson != null) {
+                for (String key : decryptJson.keySet()) {
+                    Object value = decryptJson.get(key);
+                    this.decryptedParams.put(key, value != null ? value.toString() : "");
+                }
+            }
         }
 
         @Override
         public String getParameter(String name) {
-            if ("value".equals(name)) {
-                return decryptedValue;
+            if (decryptedParams.containsKey(name)) {
+                return decryptedParams.get(name);
             }
             return super.getParameter(name);
         }
+
+        @Override
+        public Map<String, String[]> getParameterMap() {
+            Map<String, String[]> originalMap = super.getParameterMap();
+            Map<String, String[]> mergedMap = new HashMap<>(originalMap);
+
+            for (Map.Entry<String, String> entry : decryptedParams.entrySet()) {
+                mergedMap.put(entry.getKey(), new String[]{entry.getValue()});
+            }
+
+            return mergedMap;
+        }
+
+        @Override
+        public java.util.Enumeration<String> getParameterNames() {
+            java.util.Set<String> allNames = new java.util.HashSet<>(decryptedParams.keySet());
+            java.util.Enumeration<String> originalNames = super.getParameterNames();
+            while (originalNames.hasMoreElements()) {
+                allNames.add(originalNames.nextElement());
+            }
+            return java.util.Collections.enumeration(allNames);
+        }
+
+        @Override
+        public String[] getParameterValues(String name) {
+            if (decryptedParams.containsKey(name)) {
+                return new String[]{decryptedParams.get(name)};
+            }
+            return super.getParameterValues(name);
+        }
     }
 
     static class PathDecodedRequest extends HttpServletRequestWrapper {