Java:在私有策略文件中应用权限时遇到问题

时间:2014-02-13 12:45:12

标签: java netbeans securitymanager

我正在尝试使用oracle教程,使用安全管理器授予或拒绝访问Java应用程序中的系统资源:http://docs.oracle.com/javase/tutorial/security/tour2/index.html

我想授予我的NetBeans项目访问“java.home”和“user.home”属性的权限。 为此,我生成了一个名为$ HOME / .java.policy的私有策略文件:

grant codeBase "file:/home/myself/NetBeansProjects/" {
  permission java.util.PropertyPermission "user.home", "read";
  permission java.util.PropertyPermission "java.home", "read";
};

其中codeBase指向我的NetBeans项目所在的目录(/ home / myself / NetBeansProjects /)

在java.security中,我定义了以下url:

# The default is to have a single system-wide policy file,
# and a policy file in the user's home directory.
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy

现在我的一个NetBeans项目正在尝试阅读“java.home”和“user.home”属性:

System.out.println("About to get user.home property value");
s = System.getProperty("user.home", "not specified");
System.out.println("  Your user home directory is: " + s);


System.out.println("About to get java.home property value");
s = System.getProperty("java.home", "not specified");
System.out.println("  Your JRE installation directory is: " + s);

但是如果我尝试在启用了安全管理器的命令行中运行Java程序,我仍然会得到一个AccessControlException:

$ pwd
/home/myself/NetBeansProjects/GetProps/src

$ java -Djava.security.manager getprops.GetProps

About to get user.home property value
Caught exception java.security.AccessControlException: access denied  ("java.util.PropertyPermission" "user.home" "read")

我想知道问题是否存在于私有策略文件的codeBase路径中?

系统&我正在测试的软件: NetBeans IDE 7.4(Build 201310111528) Java:1.7.0_45; OpenJDK客户端VM 24.45-b08 运行时:OpenJDK运行时环境1.7.0_45-b31 系统:在i386上运行的Linux版本3.12.3-1-ARCH; UTF-8; es_ES(nb)

1 个答案:

答案 0 :(得分:2)

假设您的项目代码实际上在子目录中,您可能需要:

grant codeBase "file:/home/myself/NetBeansProjects/-" {

(以递归方式向所有子目录授予权限)。