代码之家  ›  专栏  ›  技术社区  ›  Matt Sheppard

从Java读取Windows ACL

  •  3
  • Matt Sheppard  · 技术社区  · 15 年前

    在Java程序中,我希望能够列出有权读取给定文件的Windows用户和组。Java没有读取WindowsACL信息的内置功能(至少在 Java 7 ),所以我正在寻找其他解决方案。

    如果做不到这一点,也许运行cacls并捕获并处理输出将是一个合理的临时解决方案-cacls的输出格式是否在任何地方都有完整的文档记录,它是否可能在Windows版本之间发生变化?

    2 回复  |  直到 15 年前
        1
  •  5
  •   mdma    15 年前

    如果你知道windows的api,你可以使用 JNA (没有编写本机代码的麻烦的JNI)调用windowsapi来获取ACL数据。

    另外这里是 an article 它使用VBScript获取文件安全性详细信息。您可以修改它,让它以可解析的格式(例如XML)返回详细信息。您可以通过运行cscript.exe“,使用运行时.exec()或 ProcessBuilder . 您可以将ACL信息写入标准输出,并使用 java.lang.Process 读取过程输出。

        2
  •  5
  •   Community CDub    8 年前

    mdma answer

    Path file = Paths.get("c:\\test-file.dat");
    AclFileAttributeView aclFileAttributes = Files.getFileAttributeView(
        file, AclFileAttributeView.class);
    
    for (AclEntry aclEntry : aclFileAttributes.getAcl()) {
        System.out.println(aclEntry.principal() + ":");
        System.out.println(aclEntry.permissions() + "\n");
    }