【发布时间】:2020-06-24 14:58:44
【问题描述】:
这是我的政策文件
grant {
permission java.util.PropertyPermission "*", "read,write";
permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "setSecurityManager";
permission java.lang.RuntimePermission "createSecurityManager";
};
这是测试用例:
System.setProperty("java.security.policy", SECURITY_POLICY_BASEDIR + "/create-classloader.policy");
System.setSecurityManager(new SecurityManager());
System.getSecurityManager().checkCreateClassLoader();
System.setProperty("java.security.policy", "default"); // change policy at runtime
System.setSecurityManager(new SecurityManager());
System.getSecurityManager().checkCreateClassLoader(); // expecting a "AccessControlException"
我期待在 sn-p 2 的最后一行出现AccessControlException。有任何指针吗?
【问题讨论】:
-
在上面的代码之后,尝试加载一个不属于JDK的类。然后你应该得到
AccessControlException。至少我尝试时是这样。 -
很抱歉这么说,但这对我来说没有意义。
-
当您的 java 代码尝试加载类时,将查询您设置的策略,因为您正在通过方法
checkCreateClassLoader()设置类加载器策略。仅仅设置策略没有任何作用。你试过我的建议了吗? -
是的,它返回“访问被拒绝”但带有
accessDeclaredMembers。我希望它是createClassLoader错误。问题很简单,“我们可以在运行时更改它吗?”