我正在尝试使用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)
答案 0 :(得分:2)
假设您的项目代码实际上在子目录中,您可能需要:
grant codeBase "file:/home/myself/NetBeansProjects/-" {
(以递归方式向所有子目录授予权限)。