【发布时间】:2015-07-26 08:21:54
【问题描述】:
我有一个小程序类试图读取客户端系统中的文件。但是当访问这个文件时,我得到 java.io.filePrmission 错误
java.security.AccessControlException:访问被拒绝 ("java.io.FilePermission" "C:\my_download\mytext_11May" "读取")
我可以使用 JRE 1.6 访问该文件。但是当小程序使用 jre1.8 时会抛出上述异常。
我在用户主目录中的策略文件:
grant codeBase "file:${java.home}/lib/ext/*" {
permission java.security.AllPermission;
};
grant {
permission java.security.AllPermission;
};
grant codeBase "https://*.mydomain.net-" {
permission java.security.AllPermission;
};
在 1.6 中,它仅在默认授权块中给出 AllPermission 时才有效。
下面是我用来访问文件的代码:
File sourceDir = null;
try {
sourceDir = (File) AccessController
.doPrivileged(new PrivilegedExceptionAction<File>() {
public File run() {
return new File(filePath);
}
});
} catch (PrivilegedActionException e) {
System.out.println(e.getMessage()+"-----");
e.printStackTrace();
} catch(Exception e) {
System.out.println("EEEException: " + e.getMessage());
e.printStackTrace();
}
奇怪的是,catch 块也没有被执行。它执行调用者方法的 catch 块。
jar 使用所有必要的域和权限进行签名,如下所述。
Permissions: all-permissions
当我在同一个 jar 中尝试写入操作时,即使没有使用 1.6 和 1.8 版本的策略文件,它也能正常工作。只有当我尝试阅读它时,我才会得到这个例外。在 1.6 中,我通过使用 java 策略克服了问题,但这在 1.8 版中没有帮助。
提前感谢您的帮助!
【问题讨论】:
-
“jar 已签名..” 这样就没有必要乱搞策略文件了!
标签: java security exception applet policyfiles