加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java Reflection权限错误

发布时间:2020-12-14 19:16:32 所属栏目:Java 来源:网络整理
导读:我正在尝试通过URLClassLoader加载一个类(好吧,它既不适用于普通的类加载器),也希望它们没有任何权限. 因此,我创建了自己的安全管理器,它在启动时创建了一个密钥,只能通过请求一次(在主线程中). 安全管理器有两个列表,即applicationThread,它们将被授予任何

我正在尝试通过URLClassLoader加载一个类(好吧,它既不适用于普通的类加载器),也希望它们没有任何权限.

因此,我创建了自己的安全管理器,它在启动时创建了一个密钥,只能通过请求一次(在主线程中).
安全管理器有两个列表,即applicationThread,它们将被授予任何权限和temporaryList,它只被授予一次权限(它是关于反射).

由于很难描述,我决定上传整个内容:请看下面的链接

好的,回来:我创建了一个WatchDog线程,它检查线程是否不会占用太多时间.

当我现在开始从URLClassLoader实例化两个类时,我调用了30个方法而没有出现任何错误,但是在第31次调用时,它尝试检查以下的权限,但这只是在第30次调用之后感到满意.

java.lang.RuntimePermission accessClassInPackage.sun.reflect),

有谁知道那里发生了什么?

编辑:
我有时间去除这个例子.
http://myxcode.at/securitymanager.zip
我发现,SecurityManager不会被要求同步.只需运行这一小段代码,看看红线.

如果红线出现在第一行,只需再次运行程序,您会发现它似乎有点不受控制.

或多或少的问题是,我需要同步安全管理器.
这是我无法面对错误的人的输出(错误?)
http://pastebin.com/E9yLRLif

edit2:也许是关于控制台的?也许控制台太慢了?

最佳答案
对我来说,当i = 15时检查发生:

checkPermission ( (java.lang.RuntimePermission accessClassInPackage.sun.reflect) ) for Thread[main,5,main]

延迟权限检查的原因是ReflectionFactory类的inflationThreshold,它由NativeMethodAccessorImpl.java的调用方法使用:

public Object invoke(Object obj,Object[] args)
        throws IllegalArgumentException,InvocationTargetException {
    if (++numInvocations > ReflectionFactory.inflationThreshold()) {
        MethodAccessorImpl acc = (MethodAccessorImpl) new MethodAccessorGenerator()
                .generateMethod(method.getDeclaringClass(),method
                        .getName(),method.getParameterTypes(),method.getReturnType(),method
                                .getExceptionTypes(),method
                                .getModifiers());
        parent.setDelegate(acc);
    }

    return invoke0(method,obj,args);
}

要禁用延迟,您可以使用Reflection API

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读