授予rt.jar权限

时间:2013-03-05 02:26:44

标签: java security policy

我们没有使用默认的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

1 个答案:

答案 0 :(得分:0)

我认为你不能从系统类中移除权限(null ClassLoadernull ProtectionDomain,所以没有CodeSource)。

我猜你误解了Java 2安全模型(很容易做到,因为没有人真正理解它)。通过检查堆栈中的所有帧(粗略地说)来完成安全检查(除少数选择方法外)。每个测试的帧必须具有权限。如果堆栈中只有一帧没有权限,则检查失败。

(在咨询SecurityManager之前,您可能会AccessController始终拒绝某些权限。)