从Java读取Windows ACL

从Java读取Windows ACL,java,windows,security,acl,Java,Windows,Security,Acl,在Java程序中,我希望能够列出有权读取给定文件的Windows用户和组。Java没有内置的读取Windows ACL信息的能力(至少直到),所以我正在寻找其他解决方案 是否有任何第三方库可以直接访问Windows文件的ACL信息 如果做不到这一点,那么运行CACL并捕获然后处理输出可能是一个合理的临时解决方案——CACL的输出格式是否在任何地方都有完整的文档记录,并且可能在不同版本的Windows之间发生变化?如果您了解Windows API,您可以使用(JNI,无需编写本机代码)调用Wind

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

是否有任何第三方库可以直接访问Windows文件的ACL信息


如果做不到这一点,那么运行CACL并捕获然后处理输出可能是一个合理的临时解决方案——CACL的输出格式是否在任何地方都有完整的文档记录,并且可能在不同版本的Windows之间发生变化?

如果您了解Windows API,您可以使用(JNI,无需编写本机代码)调用Windows API以获取ACL数据

另一种方法是使用VBScript获取文件安全详细信息。您可以修改它,并让它以可解析的格式(例如XML)返回详细信息。您可以使用Runtime.exec()或运行“cscript.exe”来调用VBScript文件。您可以将ACL信息写入标准输出,并使用
java.lang.Process
上可用的流来读取流程输出

虽然执行vbscript可能看起来有点黑客,但它会让您快速入门,因为大部分代码都已经编写并运行(我想-我还没有在本文中尝试过该脚本)使用该脚本还可以避免通过JNA将相关的Win32 API映射到java。

介绍了java 6的最佳方法,但下面是java 7的一个快速示例:

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");
}

谢谢,我正在从文件夹安全获取用户详细信息,我还需要用户和组的电子邮件地址。有什么办法可以做到吗