首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java.security.Access.ControlException:访问被拒绝(“java.io.FilePermission”“[对象文件]”"read")

Java.security.Access.ControlException:访问被拒绝(“java.io.FilePermission”“[对象文件]”"read")
EN

Stack Overflow用户
提问于 2014-11-22 17:47:40
回答 1查看 4.6K关注 0票数 3

我有以下问题:

我有一个Java程序,它通过Applet接收二进制文件。

我在getParameter(file)中收到了该文件,并使用java.io.FileInputStream(file)读取了该文件。

我将这个文件放在web服务器上,并通过javascript调用java程序。

首先,当我运行程序时,出现了消息错误:

代码语言:javascript
复制
Java.security.Access.ControlException: access denied("java.io.FilePermission" "[object file]" "read")

我通过keytool创建了一个密钥,并使用jarsigner对jar文件进行了签名。

但是,即使执行命令jarsigner,当我再次运行Java程序时,仍然会出现错误消息:

代码语言:javascript
复制
Java.security.Access.ControlException: access denied("java.io.FilePermission" "[object file]" "read"). 

因此,即使在签名之后,错误仍然存在。

我真的不知道该怎么办。

有谁可以帮我?

在java代码下面:

代码语言:javascript
复制
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 ;
        }

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-22 18:22:22

您需要用AccessController.doPrivileged包装代码,例如:

代码语言:javascript
复制
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已经签名,并且您理解了 其他 后果 of 正在运行 正在运行 小程序

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27080512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档