Чтение Windows ACL из Java - PullRequest
3 голосов
/ 12 мая 2010

В Java-программе я хочу иметь возможность перечислять пользователей и группы Windows, которые имеют разрешение на чтение данного файла. Java не имеет встроенной возможности считывать информацию ACL Windows (по крайней мере, до Java 7 ), поэтому я ищу другие решения.

Существуют ли какие-либо сторонние библиотеки, которые могут обеспечить прямой доступ к информации ACL для файла Windows?

Если это не удастся, то может быть разумным временным решением было бы запустить cacls и захватить, а затем обработать вывод. Точно ли задокументирован формат вывода cacls где-нибудь и может ли он меняться между версиями Windows?

Ответы [ 2 ]

5 голосов
/ 30 декабря 2011

mdma ' ответ охватывает лучшие подходы для 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");
}
5 голосов
/ 12 мая 2010

Если вы знаете Windows API, вы можете использовать JNA (JNI без хлопот по написанию собственного кода) для вызова API Windows для получения данных ACL.

В качестве альтернативы здесь статья , которая получает информацию о безопасности файла с помощью VBScript. Вы можете изменить это, и он будет возвращать детали в формате с возможностью анализа (например, XML). Вы можете вызвать файл VBScript, запустив cscript.exe, используя Runtime.exec () или ProcessBuilder . Вы можете записать информацию ACL в стандартный вывод и использовать потоки, доступные в java.lang.Process, для чтения вывода процесса.

Хотя exec'ing vbscript может показаться немного странным, он поможет вам быстро начать работу, поскольку большая часть кода уже написана и работает (я полагаю - я не пробовал сценарий в этой статье) Использование сценария также позволяет избежать необходимости сопоставлять соответствующие API-интерфейсы Win32 и Java через JNA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...