diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/IgnoreTarget.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/IgnoreTarget.java new file mode 100644 index 000000000..daa4f5774 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/IgnoreTarget.java @@ -0,0 +1,20 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 忽略当前字段 + * 如果注解用在类上,忽略当前类 + * 如果注解用在属性上,忽略当前属性 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD, ElementType.TYPE}) +public @interface IgnoreTarget { + /** + * 使用目的,默认为空 + */ + String[] target() default {}; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/IgnoreFieldsUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/IgnoreFieldsUtils.java new file mode 100644 index 000000000..3ff03efb1 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/IgnoreFieldsUtils.java @@ -0,0 +1,42 @@ +package com.ruoyi.common.utils; + +import com.ruoyi.common.annotation.IgnoreTarget; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * 类描述 + * + * @author nengyuan + */ +public class IgnoreFieldsUtils { + public static String[] getIgnoreFields(Object o, String target) { + Field[] fields = o.getClass().getDeclaredFields(); + if (Objects.isNull(fields) || fields.length == 0) { + return new String[0]; + } + + List list = new ArrayList<>(); + for (int i = 0; i < fields.length; i++) { + Field field = fields[i]; + if (field.isAnnotationPresent(IgnoreTarget.class)) { + String[] t = field.getAnnotation(IgnoreTarget.class).target(); + if (Objects.isNull(t) || t.length == 0) { + list.add(field.getName()); + } + + for (String str : t) { + if (StringUtils.equals(str, target)) { + list.add(field.getName()); + break; + } + } + } + } + + return list.toArray(new String[list.size()]); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java index 0e5c51883..978c9c399 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java @@ -2,8 +2,12 @@ package com.ruoyi.framework.aspectj; import java.util.Collection; import java.util.Map; +import java.util.Objects; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import com.ruoyi.common.annotation.IgnoreTarget; +import com.ruoyi.common.utils.IgnoreFieldsUtils; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; @@ -182,27 +186,29 @@ public class LogAspect /** * 参数拼装 */ - private String argsArrayToString(Object[] paramsArray) - { - String params = ""; - if (paramsArray != null && paramsArray.length > 0) - { - for (Object o : paramsArray) - { - if (StringUtils.isNotNull(o) && !isFilterObject(o)) - { - try - { - Object jsonObj = JSONObject.toJSONString(o, excludePropertyPreFilter()); - params += jsonObj.toString() + " "; - } - catch (Exception e) - { - } - } + private String argsArrayToString(Object[] paramsArray) { + StringBuffer sb = new StringBuffer(); + if (Objects.isNull(paramsArray) || paramsArray.length <= 0) { + return StringUtils.EMPTY; + } + + for (Object o : paramsArray) { + if (Objects.isNull(o) || isFilterObject(o)) { + continue; + } + + try { + PropertyPreFilters.MySimplePropertyPreFilter filter = excludePropertyPreFilter(); + + // 过滤注解需要忽略的字段 + filter.addExcludes(IgnoreFieldsUtils.getIgnoreFields(o, "LogAspect")); + sb.append(JSONObject.toJSONString(o, filter)); + } catch (Exception e) { + //TODO something } } - return params.trim(); + + return sb.toString().trim(); } /** @@ -236,7 +242,8 @@ public class LogAspect return entry.getValue() instanceof MultipartFile; } } + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse - || o instanceof BindingResult; + || o instanceof BindingResult || clazz.isAnnotationPresent(IgnoreTarget.class); } }