summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshizhendong <[email protected]>2021-03-29 17:03:57 +0800
committershizhendong <[email protected]>2021-03-29 17:03:57 +0800
commit122710b7697991d9140dc4da1fb7cd6399cc9c0b (patch)
treee926ec5b74e4fc65e18fca3f8e9dd1e6840f0ec6
parent0193cc536201ef889c23897195ff51a57a628e6c (diff)
fix: 修改 sysLog params 过长导致的问题
1. 修改 sysLog params 过长导致的 bug,字段过长则进行截取
-rw-r--r--nz-admin/src/main/java/com/nis/common/aspect/SysLogAspect.java17
-rw-r--r--nz-admin/src/main/java/com/nis/common/utils/Constant.java5
-rw-r--r--nz-admin/src/main/java/com/nis/common/utils/StringUtils.java42
3 files changed, 61 insertions, 3 deletions
diff --git a/nz-admin/src/main/java/com/nis/common/aspect/SysLogAspect.java b/nz-admin/src/main/java/com/nis/common/aspect/SysLogAspect.java
index dd6b4c1c..51f2b7bd 100644
--- a/nz-admin/src/main/java/com/nis/common/aspect/SysLogAspect.java
+++ b/nz-admin/src/main/java/com/nis/common/aspect/SysLogAspect.java
@@ -131,14 +131,22 @@ public class SysLogAspect {
// 处理参数记录
String paramResult = this.handleArgs(syslog, args, ShiroUtils.getUserEntity());
paramResult = this.handleLogParam(request.getRequestURI(), paramResult);
+ if (paramResult.getBytes().length > Constant.MYSQL_TEXT_MAXLENGTH){
+ paramResult = StringUtils.cutString(paramResult, Constant.MYSQL_TEXT_MAXLENGTH);
+ }
sysLog.setParams(paramResult);
// 登录出现异常时
if ("login".equals(operationType)) {
sysLog.setUserId(null);
Map map = gson.fromJson(gson.toJson(params.get(0)), Map.class);
- map.remove("password");
- sysLog.setParams(gson.toJson(map));
+ map.remove("pin");
+ String logParams = gson.toJson(map);
+ logParams = ToolUtil.isEmpty(logParams) ? "" : logParams;
+ if (logParams.getBytes().length > Constant.MYSQL_TEXT_MAXLENGTH){
+ logParams = StringUtils.cutString(logParams, Constant.MYSQL_TEXT_MAXLENGTH);
+ }
+ sysLog.setParams(logParams);
} else {
Long userId = ((SysUserEntity) SecurityUtils.getSubject().getPrincipal()).getUserId();
sysLog.setUserId(userId == null ? null : userId.intValue());
@@ -207,6 +215,9 @@ public class SysLogAspect {
// 处理 参数信息
paramResult = this.handleLogParam(request.getRequestURI(), paramResult);
+ if (paramResult.getBytes().length > Constant.MYSQL_TEXT_MAXLENGTH){
+ paramResult = StringUtils.cutString(paramResult, Constant.MYSQL_TEXT_MAXLENGTH);
+ }
sysLog.setParams(paramResult);
Long userId = null;
@@ -387,7 +398,7 @@ public class SysLogAspect {
} else if ("login".equals(operationType)) {
String params = gson.toJson(list.get(0));
Map map = gson.fromJson(params, Map.class);
- map.remove("password");
+ map.remove("pin");
result = gson.toJson(map);
} else {
if (ToolUtil.isNotEmpty(list)) {
diff --git a/nz-admin/src/main/java/com/nis/common/utils/Constant.java b/nz-admin/src/main/java/com/nis/common/utils/Constant.java
index 1c4722ca..2ddeb261 100644
--- a/nz-admin/src/main/java/com/nis/common/utils/Constant.java
+++ b/nz-admin/src/main/java/com/nis/common/utils/Constant.java
@@ -55,6 +55,11 @@ public class Constant {
*/
public static final String ASC = "asc";
+ /**
+ * mysql text 最大长度 65535
+ */
+ public static final Integer MYSQL_TEXT_MAXLENGTH = 65535;
+
/**
* 菜单类型
*/
diff --git a/nz-admin/src/main/java/com/nis/common/utils/StringUtils.java b/nz-admin/src/main/java/com/nis/common/utils/StringUtils.java
index 488659dc..7ae25a13 100644
--- a/nz-admin/src/main/java/com/nis/common/utils/StringUtils.java
+++ b/nz-admin/src/main/java/com/nis/common/utils/StringUtils.java
@@ -803,5 +803,47 @@ public abstract class StringUtils {
return stringBuffer.toString();
}
+ /**
+ * 按指定的字节数截取字符串(一个中文字符占3个字节,一个英文字符或数字占1个字节)
+ *
+ * @param sourceString 源字符串
+ * @param cutBytes 要截取的字节数
+ * @return
+ */
+ public static String cutString(String sourceString, int cutBytes) {
+ if (sourceString == null || "".equals(sourceString.trim())) {
+ return "";
+ }
+
+ int lastIndex = 0;
+ boolean stopFlag = false;
+
+ int totalBytes = 0;
+ for (int i = 0; i < sourceString.length(); i++) {
+ String s = Integer.toBinaryString(sourceString.charAt(i));
+ if (s.length() > 8) {
+ totalBytes += 3; // 汉字
+ } else {
+ totalBytes += 1;
+ }
+
+ if (!stopFlag) {
+ if (totalBytes == cutBytes) {
+ lastIndex = i;
+ stopFlag = true;
+ } else if (totalBytes > cutBytes) {
+ lastIndex = i - 1;
+ stopFlag = true;
+ }
+ }
+ }
+
+ if (!stopFlag) {
+ return sourceString;
+ } else {
+ return sourceString.substring(0, lastIndex + 1);
+ }
+ }
+
}