作者 RuoYi

操作日志记录支持排除敏感属性字段

  1 +package com.ruoyi.common.filter;
  2 +
  3 +import com.alibaba.fastjson2.filter.SimplePropertyPreFilter;
  4 +
  5 +/**
  6 + * 排除JSON敏感属性
  7 + *
  8 + * @author ruoyi
  9 + */
  10 +public class PropertyPreExcludeFilter extends SimplePropertyPreFilter
  11 +{
  12 + public PropertyPreExcludeFilter()
  13 + {
  14 + }
  15 +
  16 + public PropertyPreExcludeFilter addExcludes(String... filters)
  17 + {
  18 + for (int i = 0; i < filters.length; i++)
  19 + {
  20 + this.getExcludes().add(filters[i]);
  21 + }
  22 + return this;
  23 + }
  24 +}
@@ -19,10 +19,11 @@ import com.ruoyi.common.annotation.Log; @@ -19,10 +19,11 @@ import com.ruoyi.common.annotation.Log;
19 import com.ruoyi.common.core.domain.model.LoginUser; 19 import com.ruoyi.common.core.domain.model.LoginUser;
20 import com.ruoyi.common.enums.BusinessStatus; 20 import com.ruoyi.common.enums.BusinessStatus;
21 import com.ruoyi.common.enums.HttpMethod; 21 import com.ruoyi.common.enums.HttpMethod;
  22 +import com.ruoyi.common.filter.PropertyPreExcludeFilter;
  23 +import com.ruoyi.common.utils.SecurityUtils;
22 import com.ruoyi.common.utils.ServletUtils; 24 import com.ruoyi.common.utils.ServletUtils;
23 import com.ruoyi.common.utils.StringUtils; 25 import com.ruoyi.common.utils.StringUtils;
24 import com.ruoyi.common.utils.ip.IpUtils; 26 import com.ruoyi.common.utils.ip.IpUtils;
25 -import com.ruoyi.common.utils.SecurityUtils;  
26 import com.ruoyi.framework.manager.AsyncManager; 27 import com.ruoyi.framework.manager.AsyncManager;
27 import com.ruoyi.framework.manager.factory.AsyncFactory; 28 import com.ruoyi.framework.manager.factory.AsyncFactory;
28 import com.ruoyi.system.domain.SysOperLog; 29 import com.ruoyi.system.domain.SysOperLog;
@@ -38,6 +39,9 @@ public class LogAspect @@ -38,6 +39,9 @@ public class LogAspect
38 { 39 {
39 private static final Logger log = LoggerFactory.getLogger(LogAspect.class); 40 private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
40 41
  42 + /** 排除敏感属性字段 */
  43 + public static final String[] EXCLUDE_PROPERTIES = { "password", "oldPassword", "newPassword", "confirmPassword" };
  44 +
41 /** 45 /**
42 * 处理完请求后执行 46 * 处理完请求后执行
43 * 47 *
@@ -168,7 +172,7 @@ public class LogAspect @@ -168,7 +172,7 @@ public class LogAspect
168 { 172 {
169 try 173 try
170 { 174 {
171 - Object jsonObj = JSON.toJSON(o); 175 + String jsonObj = JSON.toJSONString(o, excludePropertyPreFilter());
172 params += jsonObj.toString() + " "; 176 params += jsonObj.toString() + " ";
173 } 177 }
174 catch (Exception e) 178 catch (Exception e)
@@ -181,6 +185,14 @@ public class LogAspect @@ -181,6 +185,14 @@ public class LogAspect
181 } 185 }
182 186
183 /** 187 /**
  188 + * 忽略敏感属性
  189 + */
  190 + public PropertyPreExcludeFilter excludePropertyPreFilter()
  191 + {
  192 + return new PropertyPreExcludeFilter().addExcludes(EXCLUDE_PROPERTIES);
  193 + }
  194 +
  195 + /**
184 * 判断是否需要过滤的对象。 196 * 判断是否需要过滤的对象。
185 * 197 *
186 * @param o 对象信息。 198 * @param o 对象信息。