mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2026-06-30 17:44:27 +00:00
fix 修复 响应加密编码错误问题
This commit is contained in:
+5
-21
@@ -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 加密密钥。
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user