fix 修复 响应加密编码错误问题

This commit is contained in:
疯狂的狮子Li
2026-06-30 16:50:59 +08:00
parent e571f339b4
commit 4e6dbee008
@@ -23,11 +23,11 @@ import java.util.Base64;
public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper {
private static final SecureRandom SECURE_RANDOM = new SecureRandom();
private static final Charset RESPONSE_CHARSET = StandardCharsets.UTF_8;
private final ByteArrayOutputStream byteArrayOutputStream;
private final ServletOutputStream servletOutputStream;
private PrintWriter printWriter;
private Charset charset;
/**
* 构造加密响应包装器。
@@ -39,7 +39,6 @@ public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper {
super(response);
this.byteArrayOutputStream = new ByteArrayOutputStream();
this.servletOutputStream = this.getOutputStream();
this.charset = resolveCharset(response);
}
/**
@@ -50,8 +49,7 @@ public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper {
@Override
public PrintWriter getWriter() {
if (printWriter == null) {
charset = resolveCharset((HttpServletResponse) getResponse());
printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream, charset));
printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream, RESPONSE_CHARSET));
}
return printWriter;
}
@@ -106,7 +104,7 @@ public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper {
*/
public String getContent() throws IOException {
flushBuffer();
return byteArrayOutputStream.toString(charset);
return byteArrayOutputStream.toString(RESPONSE_CHARSET);
}
/**
@@ -130,14 +128,14 @@ public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper {
// vue版本需要设置
servletResponse.addHeader("Access-Control-Expose-Headers", headerFlag);
servletResponse.setHeader(headerFlag, encryptPassword);
servletResponse.setCharacterEncoding(charset.name());
servletResponse.setCharacterEncoding(RESPONSE_CHARSET.name());
// 获取原始内容
String originalBody = this.getContent();
// 对内容进行加密
String encryptContent = EncryptUtils.encryptByAes(originalBody, aesPassword);
servletResponse.setContentLengthLong(encryptContent.getBytes(charset).length);
servletResponse.setContentLengthLong(encryptContent.getBytes(RESPONSE_CHARSET).length);
return encryptContent;
}
@@ -206,20 +204,6 @@ public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper {
};
}
/**
* 解析响应字符集,未设置时默认使用 UTF-8。
*
* @param response 原始响应
* @return 响应字符集
*/
private Charset resolveCharset(HttpServletResponse response) {
String characterEncoding = response.getCharacterEncoding();
if (characterEncoding == null) {
return StandardCharsets.UTF_8;
}
return Charset.forName(characterEncoding);
}
/**
* 生成响应内容 AES 加密密钥。
*