我们没有使用默认的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
答案 0 :(得分:0)
我认为你不能从系统类中移除权限(null
ClassLoader
和null
ProtectionDomain
,所以没有CodeSource
)。
我猜你误解了Java 2安全模型(很容易做到,因为没有人真正理解它)。通过检查堆栈中的所有帧(粗略地说)来完成安全检查(除少数选择方法外)。每个测试的帧必须具有权限。如果堆栈中只有一帧没有权限,则检查失败。
(在咨询SecurityManager
之前,您可能会AccessController
始终拒绝某些权限。)