diff options
| author | shizhendong <[email protected]> | 2021-03-29 17:03:57 +0800 |
|---|---|---|
| committer | shizhendong <[email protected]> | 2021-03-29 17:03:57 +0800 |
| commit | 122710b7697991d9140dc4da1fb7cd6399cc9c0b (patch) | |
| tree | e926ec5b74e4fc65e18fca3f8e9dd1e6840f0ec6 | |
| parent | 0193cc536201ef889c23897195ff51a57a628e6c (diff) | |
fix: 修改 sysLog params 过长导致的问题
1. 修改 sysLog params 过长导致的 bug,字段过长则进行截取
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); + } + } + } |
