如何配置 Java SecurityManager 以允许从给定文件中读取所有属性

Posted

技术标签:

【中文标题】如何配置 Java SecurityManager 以允许从给定文件中读取所有属性【英文标题】:How to configure Java SecurityManager to allow to read all properties from given file 【发布时间】:2009-08-14 11:29:09 【问题描述】:

我目前正在尝试为在 Tomcat 上运行的 Nexus 存储库管理器创建一个策略文件。

Nexus 尝试读取文件 WEB-INF/plexus.properties(我已经授予了权限),并且似乎尝试从那里读取所有属性,但由于缺少以下权限而失败:

java.security.PropertyPermission * read,write

如何配置 SecurityManager 以允许从该特定文件读取所有属性?如果我将此添加到策略文件中:

permission java.security.PropertyPermision "*", "read,write"

我将授予读取和更改所有属性的权限,甚至是系统属性,不是吗?

【问题讨论】:

【参考方案1】:
    没有java.security.PropertyPermission,你的意思可能是java.util.PropertyPermission 据我了解,java.util.PropertyPermission 与从用户定义的.property 文件中读取属性无关。仅检查系统属性(即System.getProperty()System.setProperty()

您遇到的哪些错误使您认为除了读取文件权限之外您还需要其他任何东西?

【讨论】:

SecurityManager中没有类,但使用了字符串“java.security.PropertyPermission”。 @Aaron:这是我首先想到的,但我没有找到任何提到“java.security.PropertyPermission”的文档。你能指点我这样的文件吗?最好由 Sun 自己提供。【参考方案2】:

java.security.PropertyPermission 应该是一个有效的类名。 其限定名称用作 jaas 规范中定义的策略文件中的 perm_class_name : http://docs.oracle.com/javase/1.4.2/docs/guide/security/PolicyFiles.html#FileSyntax

grant <signer(s) field>, <codeBase URL> 
  <Principal field(s)> 
    permission perm_class_name "target_name", "action";
    ....
    permission perm_class_name "target_name", "action";
  ;

Joachim Sauer 是对的 -> 只检查系统属性。

我认为你应该使用java.io.FilePermission 作为 perm_class_name。 这个类的 JavaDoc 会解释它的参数(是的,这是一个 java 类!!)

BR

【讨论】:

【参考方案3】:

指定属性文件的名称,而不是“*”。

【讨论】:

以上是关于如何配置 Java SecurityManager 以允许从给定文件中读取所有属性的主要内容,如果未能解决你的问题,请参考以下文章

java基础系列--SecurityManager入门(转)

如何在 Java 中使用启用的 SecurityManager 创建 newInstance

有没有办法在 Java 中使用多个 SecurityManager(s)?

java.lang.SecurityManager 中的初始化字段是做啥用的?

Java SecurityManager 多线程

java中的SecurityManager有没有办法选择性地授予ReflectPermission(“suppressAccessChecks”)?