我有以下问题:
我有一个Java程序,通过Applet接收二进制文件。
我收到了getParameter(file)
的该文件,并使用java.io.FileInputStream(file)
读取该文件。
我将此文件放在Web服务器上并通过javascript调用java程序
首先,当我运行程序时,发生了消息错误:
Java.security.Access.ControlException: access denied("java.io.FilePermission" "[object file]" "read")
我通过keytool
创建了一个密钥,并使用jarsigner
对jar文件进行了签名。
但是,即使执行命令jarsigner
,当我再次运行Java程序时,错误信息也会继续发生:
Java.security.Access.ControlException: access denied("java.io.FilePermission" "[object file]" "read").
因此,即使签名后错误仍然存在。
我真的不知道该怎么做。
任何人都可以帮助我吗?
java代码下面:
public class InJava extends Applet{
String parametro;
public void sayHello() {
parametro = getParameter("parametro");
java.io.FileInputStream fis = null;
try {
fis = new java.io.FileInputStream(parametro);
}
catch (Exception e) {
String retorno_exc = e.toString();
return ;
}
}
答案 0 :(得分:2)
您需要将代码包装在AccessController.doPrivileged中,例如:
public class InJava extends Applet{
public void sayHello() {
final String parametro = getParameter("parametro");
FileInputStream fis = AccessController.doPrivileged(new PrivilegedAction<FileInputStream>() {
public FileInputStream run() {
try {
retrun new FileInputStream(parametro);
} catch (IOException e) {
// handle exception
}
}
});
}
确保您的applet jar已签名,并且您了解all other consequences的running applet {{3}}。