From 7804bf8f434a80325be986e36f393acc2d3e9e61 Mon Sep 17 00:00:00 2001 From: weizhile <348358584@qq.com> Date: Sun, 26 Nov 2023 01:13:24 +0800 Subject: [PATCH 1/6] Remove unnecessary dependencies for audit module --- apollo-audit/apollo-audit-spring-boot-starter/pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/apollo-audit/apollo-audit-spring-boot-starter/pom.xml b/apollo-audit/apollo-audit-spring-boot-starter/pom.xml index 11e52f2dd77..649ee2f2cb6 100644 --- a/apollo-audit/apollo-audit-spring-boot-starter/pom.xml +++ b/apollo-audit/apollo-audit-spring-boot-starter/pom.xml @@ -38,10 +38,6 @@ org.springframework.boot spring-boot-autoconfigure - - org.aspectj - aspectjrt - \ No newline at end of file From 9b9cbcc35d3f064772bd0f01ece4cbdd42f32ca4 Mon Sep 17 00:00:00 2001 From: weizhile <348358584@qq.com> Date: Sun, 26 Nov 2023 10:41:44 +0800 Subject: [PATCH 2/6] Remove unnecessary import --- .../ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java | 2 -- .../com/ctrip/framework/apollo/audit/util/ApolloAuditUtil.java | 1 - 2 files changed, 3 deletions(-) diff --git a/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java b/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java index 054d637139b..a5bd683c377 100644 --- a/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java +++ b/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java @@ -24,9 +24,7 @@ import com.ctrip.framework.apollo.audit.constants.ApolloAuditConstants; import java.lang.annotation.Annotation; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; diff --git a/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/util/ApolloAuditUtil.java b/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/util/ApolloAuditUtil.java index 85c69e1c70b..0b03535dfc3 100644 --- a/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/util/ApolloAuditUtil.java +++ b/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/util/ApolloAuditUtil.java @@ -28,7 +28,6 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Objects; import java.util.UUID; import java.util.stream.Collectors; import javax.persistence.Id; From 3dda0eff904353886d62b5476d79b9c1c908f76a Mon Sep 17 00:00:00 2001 From: weizhile <348358584@qq.com> Date: Sun, 3 Dec 2023 17:42:45 +0800 Subject: [PATCH 3/6] Update ApolloAuditSpanAspect.java --- .../audit/aop/ApolloAuditSpanAspect.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java b/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java index a5bd683c377..163ffb46249 100644 --- a/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java +++ b/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java @@ -26,9 +26,12 @@ import java.lang.reflect.Method; import java.util.Collection; import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.cglib.core.ReflectUtils; @Aspect public class ApolloAuditSpanAspect { @@ -61,6 +64,7 @@ void auditDataInfluenceArg(ProceedingJoinPoint pjp) { Object arg = args[i]; Annotation[] annotations = method.getParameterAnnotations()[i]; + boolean needAudit = false; String entityName = null; String fieldName = null; @@ -85,13 +89,18 @@ void auditDataInfluenceArg(ProceedingJoinPoint pjp) { Method findMethod(ProceedingJoinPoint pjp) { Class clazz = pjp.getTarget().getClass(); + Signature pjpSignature = pjp.getSignature(); String methodName = pjp.getSignature().getName(); - for (Method method : clazz.getDeclaredMethods()) { - if (method.getName().equals(methodName)) { - return method; - } + Class[] parameterTypes = null; + if (pjpSignature instanceof MethodSignature) { + parameterTypes = ((MethodSignature) pjpSignature).getParameterTypes(); + } + try { + Method method = ReflectUtils.findDeclaredMethod(clazz, methodName, parameterTypes); + return method; + } catch (NoSuchMethodException e) { + return null; } - return null; } void parseArgAndAppend(String entityName, String fieldName, Object arg) { From 82079d7519cfb634878f5484c7a3ee4e38e39f30 Mon Sep 17 00:00:00 2001 From: weizhile <348358584@qq.com> Date: Sun, 3 Dec 2023 17:53:26 +0800 Subject: [PATCH 4/6] Update ApolloAuditSpanAspectTest.java --- .../apollo/audit/aop/ApolloAuditSpanAspectTest.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspectTest.java b/apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspectTest.java index 303a4f07df3..aeba598b3d0 100644 --- a/apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspectTest.java +++ b/apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspectTest.java @@ -17,6 +17,7 @@ package com.ctrip.framework.apollo.audit.aop; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; @@ -37,7 +38,7 @@ import java.util.Arrays; import java.util.List; import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.Signature; +import org.aspectj.lang.reflect.MethodSignature; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; @@ -99,16 +100,19 @@ public void testAuditDataInfluenceArg() throws NoSuchMethodException { public void testFindMethod() throws NoSuchMethodException { ProceedingJoinPoint mockPJP = mock(ProceedingJoinPoint.class); MockAuditClass mockAuditClass = new MockAuditClass(); - Signature signature = mock(Signature.class); + MethodSignature signature = mock(MethodSignature.class); Method method = MockAuditClass.class.getMethod("mockAuditMethod", Object.class, Object.class); + Method sameNameMethod = MockAuditClass.class.getMethod("mockAuditMethod", Object.class); { when(mockPJP.getTarget()).thenReturn(mockAuditClass); when(mockPJP.getSignature()).thenReturn(signature); when(signature.getName()).thenReturn("mockAuditMethod"); + when(signature.getParameterTypes()).thenReturn(new Class[]{Object.class, Object.class}); } Method methodFounded = aspect.findMethod(mockPJP); assertEquals(method, methodFounded); + assertNotEquals(sameNameMethod, methodFounded); } @Test @@ -155,5 +159,10 @@ public void mockAuditMethod( @ApolloAuditLogDataInfluenceTableField(fieldName = "Name") Object val1, Object val2) { } + + // same name method test + public void mockAuditMethod( + Object val2) { + } } } From e747ea996d956b73b09c3c8cc661c35548833da6 Mon Sep 17 00:00:00 2001 From: weizhile <348358584@qq.com> Date: Sun, 3 Dec 2023 20:28:03 +0800 Subject: [PATCH 5/6] Update ApolloAuditSpanAspect.java --- .../framework/apollo/audit/aop/ApolloAuditSpanAspect.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java b/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java index 163ffb46249..252f9d8a42c 100644 --- a/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java +++ b/apollo-audit/apollo-audit-impl/src/main/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspect.java @@ -25,6 +25,7 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.util.Collection; +import java.util.Objects; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.Around; @@ -59,6 +60,9 @@ public Object around(ProceedingJoinPoint pjp, ApolloAuditLog auditLog) throws Th void auditDataInfluenceArg(ProceedingJoinPoint pjp) { Method method = findMethod(pjp); + if (Objects.isNull(method)) { + return; + } Object[] args = pjp.getArgs(); for (int i = 0; i < args.length; i++) { Object arg = args[i]; From c573648c5bc4342b3a52fc1d23e6fff146d6a724 Mon Sep 17 00:00:00 2001 From: weizhile <348358584@qq.com> Date: Sun, 3 Dec 2023 20:32:10 +0800 Subject: [PATCH 6/6] Update ApolloAuditSpanAspectTest.java --- .../apollo/audit/aop/ApolloAuditSpanAspectTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspectTest.java b/apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspectTest.java index aeba598b3d0..50414aae86c 100644 --- a/apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspectTest.java +++ b/apollo-audit/apollo-audit-impl/src/test/java/com/ctrip/framework/apollo/audit/aop/ApolloAuditSpanAspectTest.java @@ -96,6 +96,19 @@ public void testAuditDataInfluenceArg() throws NoSuchMethodException { .parseArgAndAppend(eq("App"), eq("Name"), eq(args[0])); } + @Test + public void testAuditDataInfluenceArgCaseFindMethodReturnNull() throws NoSuchMethodException { + ProceedingJoinPoint mockPJP = mock(ProceedingJoinPoint.class); + Object[] args = new Object[]{new Object(), new Object()}; + { + doReturn(null).when(aspect).findMethod(any()); + when(mockPJP.getArgs()).thenReturn(args); + } + aspect.auditDataInfluenceArg(mockPJP); + verify(aspect, times(0)) + .parseArgAndAppend(eq("App"), eq("Name"), eq(args[0])); + } + @Test public void testFindMethod() throws NoSuchMethodException { ProceedingJoinPoint mockPJP = mock(ProceedingJoinPoint.class);