【问题标题】:AccessControlException when check write folder permission检查写入文件夹权限时出现 AccessControlException
【发布时间】:2014-06-26 14:28:42
【问题描述】:

我想检查文件夹的写权限。文件夹可能是 user.home 或其他东西。无论我把什么文件夹放到 FilePermission 中,我都会抓住这个..

一些代码:

public class Test {

public static void main(String[] args) {

    AccessController.checkPermission(new FilePermission(System.getProperty("user.home"), "write"));
    System.out.println("tadam");
}

}

堆栈跟踪:

Exception in thread "main" java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\Users\AntonovDI" "write")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
at java.security.AccessController.checkPermission(AccessController.java:560)
at ru.inversion.jinved.impl.Test.main(Test.java:19)

为什么?

我知道另一种解决方案,但我仍然对 =) 感兴趣

      Path userHomePath = Paths.get(System.getProperty("user.home")).toAbsolutePath();
        if (Files.isWritable(userHomePath)) {
            System.out.println("tadam");
        }

【问题讨论】:

  • 好吧,我不知道你的 user.home-Folder 是什么样的(或者它设置了什么权限等),但我强烈建议将你的代码放入 try-catch -statement,以确保它不会在抛出 AccessControlException 时停止;因为它继承自 RuntimeException,所以它是一个未经检查的异常,因此不会出现编译器错误。
  • 谢谢...我只是想简化代码,你看。我知道它并且写权限是存在的。用户主目录是 C:\Users\AntonovDI,您可以在 stacktrace 中看到它。我注意到参数中的哪个文件夹并不重要。关于 javadoc 中的安全策略的一些东西,但我不知道它到底是什么。
  • @Christian 异常不会“停止”程序。
  • 所以请告诉非本地人正确的动词是什么:-) 如果你没有捕捉到未经检查的异常,它将使 JVM 终止程序执行。这就是我说“失速”时的意思。

标签: java access-control


【解决方案1】:

您的解决方案并不相同。第一个检查 Java 沙箱是否授予对文件的写访问权限。由于您似乎没有使用安全管理器,因此毫无意义。第二个检查操作系统是否授予访问权限。不是一回事。

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2020-06-08
    • 2011-08-20
    • 2011-05-22
    相关资源
    最近更新 更多