mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2026-07-24 05:26:22 +00:00
fix 修复 响应加密编码错误问题
This commit is contained in:
+5
-21
@@ -23,11 +23,11 @@ import java.util.Base64;
|
|||||||
public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper {
|
public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper {
|
||||||
|
|
||||||
private static final SecureRandom SECURE_RANDOM = new SecureRandom();
|
private static final SecureRandom SECURE_RANDOM = new SecureRandom();
|
||||||
|
private static final Charset RESPONSE_CHARSET = StandardCharsets.UTF_8;
|
||||||
|
|
||||||
private final ByteArrayOutputStream byteArrayOutputStream;
|
private final ByteArrayOutputStream byteArrayOutputStream;
|
||||||
private final ServletOutputStream servletOutputStream;
|
private final ServletOutputStream servletOutputStream;
|
||||||
private PrintWriter printWriter;
|
private PrintWriter printWriter;
|
||||||
private Charset charset;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构造加密响应包装器。
|
* 构造加密响应包装器。
|
||||||
@@ -39,7 +39,6 @@ public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper {
|
|||||||
super(response);
|
super(response);
|
||||||
this.byteArrayOutputStream = new ByteArrayOutputStream();
|
this.byteArrayOutputStream = new ByteArrayOutputStream();
|
||||||
this.servletOutputStream = this.getOutputStream();
|
this.servletOutputStream = this.getOutputStream();
|
||||||
this.charset = resolveCharset(response);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -50,8 +49,7 @@ public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper {
|
|||||||
@Override
|
@Override
|
||||||
public PrintWriter getWriter() {
|
public PrintWriter getWriter() {
|
||||||
if (printWriter == null) {
|
if (printWriter == null) {
|
||||||
charset = resolveCharset((HttpServletResponse) getResponse());
|
printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream, RESPONSE_CHARSET));
|
||||||
printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream, charset));
|
|
||||||
}
|
}
|
||||||
return printWriter;
|
return printWriter;
|
||||||
}
|
}
|
||||||
@@ -106,7 +104,7 @@ public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper {
|
|||||||
*/
|
*/
|
||||||
public String getContent() throws IOException {
|
public String getContent() throws IOException {
|
||||||
flushBuffer();
|
flushBuffer();
|
||||||
return byteArrayOutputStream.toString(charset);
|
return byteArrayOutputStream.toString(RESPONSE_CHARSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -130,14 +128,14 @@ public class EncryptResponseBodyWrapper extends HttpServletResponseWrapper {
|
|||||||
// vue版本需要设置
|
// vue版本需要设置
|
||||||
servletResponse.addHeader("Access-Control-Expose-Headers", headerFlag);
|
servletResponse.addHeader("Access-Control-Expose-Headers", headerFlag);
|
||||||
servletResponse.setHeader(headerFlag, encryptPassword);
|
servletResponse.setHeader(headerFlag, encryptPassword);
|
||||||
servletResponse.setCharacterEncoding(charset.name());
|
servletResponse.setCharacterEncoding(RESPONSE_CHARSET.name());
|
||||||
|
|
||||||
|
|
||||||
// 获取原始内容
|
// 获取原始内容
|
||||||
String originalBody = this.getContent();
|
String originalBody = this.getContent();
|
||||||
// 对内容进行加密
|
// 对内容进行加密
|
||||||
String encryptContent = EncryptUtils.encryptByAes(originalBody, aesPassword);
|
String encryptContent = EncryptUtils.encryptByAes(originalBody, aesPassword);
|
||||||
servletResponse.setContentLengthLong(encryptContent.getBytes(charset).length);
|
servletResponse.setContentLengthLong(encryptContent.getBytes(RESPONSE_CHARSET).length);
|
||||||
return encryptContent;
|
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 加密密钥。
|
* 生成响应内容 AES 加密密钥。
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user