Java.security.Access.ControlException:拒绝访问(" java.io.FilePermission"" [object file]"" read")

时间:2014-11-22 17:47:41

标签: java applet access-denied getparameter

我有以下问题:

我有一个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 ;
        }

    }

1 个答案:

答案 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 consequencesrunning applet {{3}}。