|
|
@@ -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 {
|