Skip to content

Commit 899c214

Browse files
author
‘niuerzhuang’
committed
fix: Doesn't work in Java 9+.
1 parent fa88990 commit 899c214

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

dongtai-core/src/main/java/io/dongtai/iast/core/utils/ReflectUtils.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package io.dongtai.iast.core.utils;
22

3+
import io.dongtai.log.DongTaiLog;
4+
5+
import java.lang.reflect.AccessibleObject;
36
import java.lang.reflect.Field;
47
import java.lang.reflect.Method;
58
import java.security.AccessController;
@@ -13,15 +16,15 @@ public class ReflectUtils {
1316

1417
public static Field getFieldFromClass(Class<?> cls, String fieldName) throws NoSuchFieldException {
1518
Field field = cls.getDeclaredField(fieldName);
16-
field.setAccessible(true);
19+
setAccessible(field);
1720
return field;
1821
}
1922

2023
public static Field getDeclaredFieldFromClassByName(Class<?> cls, String fieldName) {
2124
Field[] declaredFields = cls.getDeclaredFields();
2225
for (Field field : declaredFields) {
2326
if (fieldName.equals(field.getName())) {
24-
field.setAccessible(true);
27+
setAccessible(field);
2528
return field;
2629
}
2730
}
@@ -62,11 +65,11 @@ public static Method getPublicMethodFromClass(Class<?> cls, String methodName, C
6265

6366
public static Method getSecurityPublicMethod(Method method) throws NoSuchMethodException {
6467
if (hasNotSecurityManager()) {
65-
method.setAccessible(true);
68+
setAccessible(method);
6669
return method;
6770
}
6871
return AccessController.doPrivileged((PrivilegedAction<Method>) () -> {
69-
method.setAccessible(true);
72+
setAccessible(method);
7073
return method;
7174
});
7275
}
@@ -175,12 +178,23 @@ public static Field[] getDeclaredFieldsSecurity(Class<?> cls) {
175178
private static Field[] getDeclaredFields(Class<?> cls) {
176179
Field[] declaredFields = cls.getDeclaredFields();
177180
for (Field field : declaredFields) {
178-
field.setAccessible(true);
181+
setAccessible(field);
179182
}
180183
return declaredFields;
181184
}
182185

183186
private static boolean hasNotSecurityManager() {
184187
return System.getSecurityManager() == null;
185188
}
189+
190+
private static void setAccessible(AccessibleObject accessibleObject) {
191+
try{
192+
if (!accessibleObject.isAccessible()) {
193+
accessibleObject.setAccessible(true);
194+
}
195+
} catch (Throwable e){
196+
DongTaiLog.debug(e.getMessage());
197+
}
198+
199+
}
186200
}

0 commit comments

Comments
 (0)