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);