java.security.AccessControlException:访问被拒绝(java.io.FilePermission
Posted
技术标签:
【中文标题】java.security.AccessControlException:访问被拒绝(java.io.FilePermission【英文标题】:java.security.AccessControlException: Access denied (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 安全管理器强制执行的权限有关。
【参考方案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";
以上是关于java.security.AccessControlException:访问被拒绝(java.io.FilePermission的主要内容,如果未能解决你的问题,请参考以下文章