0

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

1 回答 1

0

我认为您不能从系统类中删除权限(null ClassLoader并且null ProtectionDomain,所以不能CodeSource)。

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

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

于 2013-03-06T02:09:53.020 回答