Post请求解密修改

This commit is contained in:
huguanghan 2024-11-08 17:18:41 +08:00
parent 49c2a6f323
commit fe282f4a81
3 changed files with 76 additions and 1 deletions

View File

@ -60,6 +60,15 @@ public class DecryptingOncePerRequestFilter extends OncePerRequestFilter {
filterChain.doFilter(request, response);
}
if (POST.matches(method) && StrUtil.isNotBlank(contentType) && contentType.contains(MediaType.MULTIPART_FORM_DATA_VALUE)){
String iv = request.getHeader(IV_ATTR_NAME);
// 包装请求以修改参数
DecryptingRequestWrapper wrappedRequest = new DecryptingRequestWrapper(request,aesKey,iv);
filterChain.doFilter(wrappedRequest, response);
} else {
filterChain.doFilter(request, response);
}
}
private String readRequestBody(HttpServletRequest request) throws IOException {

View File

@ -0,0 +1,67 @@
package com.das.common.interceptor;
import com.das.common.utils.AESUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class DecryptingRequestWrapper extends HttpServletRequestWrapper {
private final Map<String, String[]> decryptedParameters = new HashMap<>();
public DecryptingRequestWrapper(HttpServletRequest request,String aeskey,String iv) throws IOException {
super(request);
// 提取并解密参数忽略文件部分
request.getParameterMap().forEach((key, values) -> {
if (!isFileParameter(key)) {
String[] decryptedValues = new String[values.length];
for (int i = 0; i < values.length; i++) {
decryptedValues[i] = decrypt(values[i],aeskey,iv); // 对每个值进行解密
}
decryptedParameters.put(key, decryptedValues);
}
else {
decryptedParameters.put(key,values);
}
});
}
@Override
public String getParameter(String name) {
if (decryptedParameters.containsKey(name)) {
return decryptedParameters.get(name)[0];
}
return super.getParameter(name);
}
@Override
public String[] getParameterValues(String name) {
if (decryptedParameters.containsKey(name)) {
return decryptedParameters.get(name);
}
return super.getParameterValues(name);
}
@Override
public Map<String, String[]> getParameterMap() {
Map<String, String[]> parameterMap = new HashMap<>(super.getParameterMap());
parameterMap.putAll(decryptedParameters);
return parameterMap;
}
// 解密
private String decrypt(String value,String aeskey,String iv) {
// 解密
return AESUtil.decrypt(aeskey, value, iv);
}
//判断是否为文件参数
private boolean isFileParameter(String key) {
// 实现用于判断 key 是否代表文件参数的逻辑
// 比如通过检查命名约定或文件类型
return key.equalsIgnoreCase("file");
}
}

View File

@ -23,7 +23,6 @@ public class FilterConfig {
//注册过滤器
registrationBean.setFilter(new DecryptingOncePerRequestFilter(aesProperties.getKey()));
registrationBean.addUrlPatterns("/api/*"); // 设置过滤器应用的URL模式
// registrationBean.addUrlPatterns("/a/*"); // 设置过滤器应用的URL模式
registrationBean.setOrder(2); // 设置过滤器的顺序
return registrationBean;
}