【问题标题】:java.security.AccessControlException: Access denied (java.io.FilePermissionjava.security.AccessControlException:访问被拒绝(java.io.FilePermission
【发布时间】:2012-05-14 07:19:57
【问题描述】:
final File parentDir = new File("S:\\PDSPopulatingProgram");
parentDir.mkdir();
final String hash = "popupateData";
final String fileName = hash + ".txt";
final File file = new File(parentDir, fileName);
file.createNewFile(); // Creates file PDSPopulatingProgram/popupateData.txt

我正在尝试在文件夹中创建一个文件,但出现异常

java.security.AccessControlException: Access denied

我在 windows 环境下工作。我可以从 Windows 资源管理器创建文件夹,但不能从 Java 代码创建文件夹。

我该如何解决这个问题?

【问题讨论】:

  • 听起来您没有在该网络共享上创建文件的权限。您可以从 Windows 资源管理器或命令行中在该目录中创建文件吗?
  • 是的,我可以从 Windows 资源管理器创建文件夹,但不能从 Java 代码创建文件夹。不知道为什么?任何帮助将不胜感激。
  • Java 应用程序是如何启动的?它是否以与您的桌面会话相同的权限运行?
  • 我从我的eclipse运行java代码,它的工作区设置在D盘。
  • 伙计们,这是java.security 例外。它与操作系统权限无关。它与 Java 安全管理器强制执行的权限有关。

标签: java security file-io file-permissions accesscontrolexception


【解决方案1】:

在您的<jre location>\lib\security\java.policy 中尝试添加:

grant { permission java.security.AllPermission; };

然后看看它是否允许你。如果是这样,您将不得不添加更细化的权限。

见:

Java 8 Documentation for java.policy files

http://java.sun.com/developer/onlineTraining/Programming/JDCBook/appA.html

【讨论】:

    【解决方案2】:

    虽然不推荐,但如果你真的想让你的 web 应用程序访问其部署目录之外的文件夹。您需要在java.policy文件中添加以下权限(路径如Petey B的回复)

    permission java.io.FilePermission "your folder path", "write"
    

    在你的情况下

    permission java.io.FilePermission "S:/PDSPopulatingProgram/-", "write"
    

    这里的/- 表示此文件夹内的任何文件或子文件夹。

    警告:但这样做会招致一些安全风险。

    【讨论】:

    • 特别感谢您提到“/-”。在 Windows 上,它不适用于路径中的反斜杠(如“\-”),并且我认为通配符运算符将是“*”,这导致我直接进入配置地狱......
    【解决方案3】:

    只需在此处记录 在 Windows 上,您需要转义 \ 字符:

    "e:\\directory\\-"
    

    【讨论】:

    • 来自Oracle docs on policy files:为了辅助独立于平台的策略文件,你还可以使用特殊符号“${/}”,它是“${file.分隔器}”。这允许像permission java.io.FilePermission "${user.home}${/}*", "read";
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2017-08-19
    • 2011-09-04
    • 2013-10-25
    • 2013-04-20
    相关资源
    最近更新 更多