我们没有使用默认的Java安全策略,因为它允许我们想要禁止的东西。所以我们有自己的政策文件,通常不允许从任何地方读取.
但这意味着rt.jar本身无法在需要时从文件中读取,这是不好的。
因此,我添加了以下规则:
grant codeBase "file:${java.home}/lib/rt.jar" {
permission java.security.AllPermission;
};
grant codeBase "file:${java.home}/jre/lib/rt.jar" {
permission java.security.AllPermission;
};我不确定java.home是属于JDK还是JRE,所以我设置了两者。但是当我运行我的测试时,当rt.jar试图从文件中读取时,我仍然会得到一个安全异常。
显然我做错了什么,所以我希望别人能发现我的错误。
我试过:
/后添加file:jar:前添加file:,在.jar后添加!/-发布于 2013-03-06 02:09:53
我认为您无法从系统类中删除权限(null ClassLoader和null ProtectionDomain,所以没有CodeSource)。
我猜您误解了Java 2安全模型(很容易做到,因为没有人真正理解它)。安全检查是通过检查堆栈中的所有帧(粗略地说)来完成的(除了少数几个选择方法)。测试的每个帧都必须具有权限。如果堆栈中只有一个没有权限的帧,那么检查就失败了。
(在咨询SecurityManager之前,您可以有一个总是拒绝某些权限的AccessController。)
https://stackoverflow.com/questions/15214765
复制相似问题