gpt4 book ai didi

java - 反射访问控制异常

转载 作者:太空宇宙 更新时间:2023-11-04 12:52:06 27 4
gpt4 key购买 nike

在我的自定义数据集中,我使用 RMI 服务器中的构造函数来创建类的新实例。

Constructor<?> constructor = dynTable.getDeclaredConstructor(Class.class);
constructor.setAccessible(true); // <-- Exception here
... = constructor.newInstance(type);
constructor.setAccessible(false);

但是,如果我设置了 SecurityManager,它会引发下面的期望。

java.security.AccessControlException: access denied ("java.lang.reflect.ReflectPermission" "suppressAccessChecks")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:457)
at java.security.AccessController.checkPermission(AccessController.java:884)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:128)
at net.sviglas.meridian.task.DefaultDatasetConstructor$1.constructDataset(DefaultDatasetConstructor.java:45)
...

服务器和客户端的策略文件:

grant {
permission java.security.AllPermission;
};

我授予了一切权限,但我仍然收到此安全异常。你知道为什么吗?

最佳答案

您在不允许的安全上下文中调用 setAccessible()。您需要调整您的 .policy 文件。显然,您的 allPermission 尚未加载。您需要使用 -Djava.security.debug=access,failure 执行代码才能查看有效的安全策略。

这与 RMI 无关,除非您使用代码库功能,否则您根本不需要安全管理器。

我还想知道为什么您调用的构造函数尚未公开。

关于java - 反射访问控制异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35718905/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com