From 07874dc51b657dcec5d48c738e6401213179d35a Mon Sep 17 00:00:00 2001 From: srma112233 <963761664@qq.com> Date: Tue, 10 Jan 2023 17:31:31 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E7=94=A8=E5=B0=81=E8=A3=85bean=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E6=96=87=E4=BB=B6=E6=97=B6=EF=BC=8Cbean=E4=B8=AD?= =?UTF-8?q?=E5=90=AB=E6=9C=89mutiFile=E7=B1=BB=E5=9E=8B=E6=97=B6=E8=B6=8A?= =?UTF-8?q?=E7=95=8C=20=E9=97=AE=E9=A2=98=E5=8E=9F=E5=9B=A0=EF=BC=9A=201.?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E8=A7=A3=EF=BC=9A=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E7=B1=BB=E6=97=B6=EF=BC=8C=E8=A1=A8=E7=A4=BA=E8=AF=A5=E7=B1=BB?= =?UTF-8?q?=E4=B8=8D=E6=89=93=E5=8D=B0=E5=88=B0=E6=97=A5=E5=BF=97=E4=B8=AD?= =?UTF-8?q?=EF=BC=8C=E6=B3=A8=E8=A7=A3=E5=B1=9E=E6=80=A7=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E8=AF=A5=E5=B1=9E=E6=80=A7=E4=B8=8D=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E5=88=B0=E6=97=A5=E5=BF=97=E4=B8=AD=202.=E4=BF=AE?= =?UTF-8?q?=E6=94=B9filter=E5=92=8C=E5=AD=97=E6=AE=B5=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/annotation/IgnoreTarget.java | 20 ++++++++ .../ruoyi/common/utils/IgnoreFieldsUtils.java | 42 +++++++++++++++++ .../ruoyi/framework/aspectj/LogAspect.java | 47 +++++++++++-------- 3 files changed, 89 insertions(+), 20 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/IgnoreTarget.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/IgnoreFieldsUtils.java 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); } } From 551fb22e98b1463dc4f0e528f81cda25f551c1de Mon Sep 17 00:00:00 2001 From: srma112233 <963761664@qq.com> Date: Wed, 11 Jan 2023 10:02:38 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/common/utils/IgnoreFieldsUtils.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) 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 index 3ff03efb1..c53acead9 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/IgnoreFieldsUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/IgnoreFieldsUtils.java @@ -4,13 +4,14 @@ import com.ruoyi.common.annotation.IgnoreTarget; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Objects; /** * 类描述 * - * @author nengyuan + * @author ruoyi */ public class IgnoreFieldsUtils { public static String[] getIgnoreFields(Object o, String target) { @@ -28,11 +29,8 @@ public class IgnoreFieldsUtils { list.add(field.getName()); } - for (String str : t) { - if (StringUtils.equals(str, target)) { - list.add(field.getName()); - break; - } + if (Arrays.asList(t).contains(target)) { + list.add(field.getName()); } } }