Java 反射访问控制异常

Java 反射访问控制异常,java,security,exception,reflection,rmi,Java,Security,Exception,Reflection,Rmi,在我的自定义数据集中,我使用RMI服务器中的构造函数来创建我的类的新实例 Constructor<?> constructor = dynTable.getDeclaredConstructor(Class.class); constructor.setAccessible(true); // <-- Exception here ... = constructor.newInstance(type); constructor.setAccessible(false); 服务

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

Constructor<?> constructor = dynTable.getDeclaredConstructor(Class.class);
constructor.setAccessible(true); // <-- Exception here
... = constructor.newInstance(type);
constructor.setAccessible(false);
服务器和客户端的策略文件:

grant {
    permission java.security.AllPermission;
};

我对一切都给予了许可,但我仍然得到了这个安全例外。您知道原因吗?

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

这与RMI无关,只是除非您使用的是codebase特性,否则根本不需要安全管理器


我还想知道为什么你调用的构造函数还不是公共的

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

这与RMI无关,只是除非您使用的是codebase特性,否则根本不需要安全管理器


我还想知道为什么你调用的构造函数还不是公共的

不要对非代码的文本使用代码格式。不要对非代码的文本使用代码格式。我将在将来使用代码库,因此我需要它。我如何确定我使用的是策略文件?另外,有趣的是,它在第一次使用后仍然有效。服务器在第二次尝试时运行良好。我已经告诉您如何确定安全策略。我将在将来使用代码库,所以我需要它。我如何确定我使用的是策略文件?另外,有趣的是,它在第一次使用后仍然有效。服务器在第二次尝试时工作正常。我已经告诉过您如何确定安全策略。
grant {
    permission java.security.AllPermission;
};