我有一个试图读取客户端系统中的文件的小程序类。但是当访问这个文件时,我得到 java.io.filePrmission 错误
java.security.AccessControlException: 访问被拒绝 ("java.io.FilePermission" "C:\my_download\mytext_11May" "read")
我可以使用 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 版中没有帮助。
在此先感谢您的帮助!