![](/img/trans.png)
[英]Signed Java Applet access denied java.io.FilePermission read
[英]java.io.FilePermission read access denied when launching applet with java 8
我有一个试图读取客户端系统中文件的applet类。 但是访问此文件时,出现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版中无济于事。
先谢谢您的帮助!
经过大量研究,找到了解决方案。
从applet调用的方法必须放在AccessController.doPrivileged块中。
例如:
public void methForApplet(){
AccessController
.doPrivileged(new PrivilegedExceptionAction<Object>() {
public Object run() {
actualMethToBeExecuted();
return null;
}
});
}
这在没有策略文件的Java 1.8和1.6中有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.