当前位置: 首页 > 知识库问答 >
问题:

JAVA木卫一。使用java 8启动小程序时,文件权限读取访问被拒绝

冀崇凛
2023-03-14

我有一个applet类,它试图读取客户端系统中的文件。但是当访问这个文件时,我得到了java。木卫一。文件传输错误

JAVA安全AccessControlException:访问被拒绝(“java.io.FilePermission”C:\my\u download\mytext\u 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版中没有帮助。

提前感谢您的帮助!

共有1个答案

施彬彬
2023-03-14

经过大量研究,找到了解决方案。

从小程序调用的方法必须在AccessController中包围。双特权区。

Ex:

public void methForApplet(){
   AccessController
        .doPrivileged(new PrivilegedExceptionAction<Object>() {
            public Object run() {
                    actualMethToBeExecuted();
                    return null;               
            }
    });
}

这在没有策略文件的情况下在java 1.8和1.6中工作。

 类似资料:
  • 它与49.0版本完美地工作。 Browsestack功能 “浏览器”:“Firefox”,“Browserversion”:“”,“OS”:“Windows”,“OSVersion”:“7”,“分辨率”:“1024x768”,“提线木偶”:true 更奇怪的事。它与Selenium 3.0.1 beta2和Firefox 49,51,52一起工作,至少用于is is_displained方法,但是

  • 我正在尝试将DataStudio报表连接到表和来自BigQuery的视图。在BigQuery中,表从位于我的驱动器中的GoogleSheet接收数据,视图正在查询同一个表,但添加了一些新字段。当我尝试将图表连接到其中一个数据源时,出现以下错误: BigQuery错误:访问被拒绝:BigQuery BigQuery:获取驱动器凭据时权限被拒绝。 原因是什么?我该怎么做才能解决这个问题? 我要说的是,

  • 从今天起,我们的Airflow服务无法访问BigQuery中的查询。所有作业都会失败,并显示以下消息: [2021-03-12 10:17:28079]{taskinstance.py:1150}错误-原因:403获取https://bigquery.googleapis.com/bigquery/v2/projects/waipu-app-prod/queries/e62030d7-36eb-4

  • 问题内容: 我已经在centos 7上安装并配置了jenkins。在文件 /etc/init.d/jenkins中* 添加了有效的 Java路径, 即“ / usr / bin / java” 。 * 以下是Java路径detils: 现在,以 root用户 运行“ service jenkins start”命令后,出现以下错误。 我无法弄清楚为什么即使每个用户都可以访问Java路径,它也会拒绝

  • 我有一个加密类(PGP加密util),只接受java.io.File对象。用于加密的内部方法(位于jar中)只接受java.io.File作为参数。 我需要从共享路径中读取一个文件,其中身份验证需要访问和ancrypt相同的文件,并写回相同的共享路径。所以我使用jcifs文件读取。它读取文件为SmbFile格式。 我这里有2个疑惑 1)是否有可能将SmbFile转换为java.io.文件,而不将内