@ -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 ) ,