授予 rt.jar 权限
Posted
技术标签:
【中文标题】授予 rt.jar 权限【英文标题】:Granting permissions to rt.jar 【发布时间】:2013-03-05 02:26:44 【问题描述】:我们没有使用默认的 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:
之后添加/
在file:
之前添加jar:
,在.jar
之后添加!/-
【问题讨论】:
【参考方案1】:我认为您不能从系统类中删除权限(null
ClassLoader
和null
ProtectionDomain
,所以不能删除CodeSource
)。
我猜你误解了 Java 2 安全模型(很容易做到,因为没有人真正理解它)。通过检查堆栈中的所有帧(粗略地说)来完成安全检查(除了一些选择方法)。测试的每一帧都必须有权限。如果堆栈中只有一帧没有权限,则检查失败。
(在咨询AccessController
之前,您可能有一个总是拒绝某些权限的SecurityManager
。)
【讨论】:
嗯......所以基本上“堆栈上的东西”没有被授予权限。我唯一能看到的可能没有被授予访问权限的是“com.intellij.rt.execution.application.AppMain”......我不确定我是否有办法解决那个问题。以上是关于授予 rt.jar 权限的主要内容,如果未能解决你的问题,请参考以下文章