diff --git a/fine-byte-buddy/src/main/java/com/fr/third/net/bytebuddy/dynamic/NexusAccessor.java b/fine-byte-buddy/src/main/java/com/fr/third/net/bytebuddy/dynamic/NexusAccessor.java index ef0ed37d8..fd724fc43 100644 --- a/fine-byte-buddy/src/main/java/com/fr/third/net/bytebuddy/dynamic/NexusAccessor.java +++ b/fine-byte-buddy/src/main/java/com/fr/third/net/bytebuddy/dynamic/NexusAccessor.java @@ -19,20 +19,19 @@ import com.fr.third.net.bytebuddy.build.HashCodeAndEqualsPlugin; import com.fr.third.net.bytebuddy.description.method.MethodDescription; import com.fr.third.net.bytebuddy.description.type.TypeDescription; import com.fr.third.net.bytebuddy.dynamic.loading.ClassInjector; -import com.fr.third.net.bytebuddy.dynamic.loading.ClassLoadingStrategy; import com.fr.third.net.bytebuddy.implementation.Implementation; import com.fr.third.net.bytebuddy.implementation.LoadedTypeInitializer; import com.fr.third.net.bytebuddy.implementation.bytecode.ByteCodeAppender; import com.fr.third.net.bytebuddy.implementation.bytecode.Removal; import com.fr.third.net.bytebuddy.implementation.bytecode.StackManipulation; -import com.fr.third.net.bytebuddy.implementation.bytecode.member.MethodInvocation; -import com.fr.third.research.annotations.SuppressFBWarnings; import com.fr.third.net.bytebuddy.implementation.bytecode.collection.ArrayFactory; import com.fr.third.net.bytebuddy.implementation.bytecode.constant.ClassConstant; import com.fr.third.net.bytebuddy.implementation.bytecode.constant.IntegerConstant; import com.fr.third.net.bytebuddy.implementation.bytecode.constant.NullConstant; import com.fr.third.net.bytebuddy.implementation.bytecode.constant.TextConstant; +import com.fr.third.net.bytebuddy.implementation.bytecode.member.MethodInvocation; import com.fr.third.org.objectweb.asm.MethodVisitor; +import com.fr.third.research.annotations.SuppressFBWarnings; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; @@ -223,7 +222,11 @@ public class NexusAccessor { return new Unavailable("Nexus injection was explicitly disabled"); } else { try { - Class nexusType = new ClassInjector.UsingReflection(ClassLoader.getSystemClassLoader(), ClassLoadingStrategy.NO_PROTECTION_DOMAIN) + /* + * 实例化UsingReflection时要指定非null的ProtectionDomain,否则开启-security后经由这里调用具体方法时会校验权限失败 + * 这里指定为NexusAccessor的ProtectionDomain,即fine-third jar + */ + Class nexusType = new ClassInjector.UsingReflection(ClassLoader.getSystemClassLoader(), getClass().getProtectionDomain()) .inject(Collections.singletonMap(TypeDescription.ForLoadedType.of(Nexus.class), ClassFileLocator.ForClassLoader.read(Nexus.class))) .get(TypeDescription.ForLoadedType.of(Nexus.class)); return new Dispatcher.Available(nexusType.getMethod("register", String.class, ClassLoader.class, ReferenceQueue.class, int.class, Object.class),