2010-05-12 4 views
3

Java 프로그램 내에서 주어진 파일을 읽을 수있는 권한이있는 Windows 사용자 및 그룹을 나열 할 수 있어야합니다. Java에는 Windows ACL 정보를 읽을 수있는 기능이 내장되어 있지 않으므로 (적어도 Java 7까지) 다른 솔루션을 찾고 있습니다.Java에서 Windows ACL 읽기

Windows 파일에 대한 ACL 정보에 직접 액세스 할 수있는 타사 라이브러리가 있습니까?

아마도 cacls를 실행하고 캡쳐 한 다음 출력을 처리하는 것이 합당한 임시 해결책이 될 것입니다 - cacls의 출력 형식이 어디에서나 문서화되어 있으며 Windows 버전간에 변경 될 가능성이 있습니까?

답변

5

Windows API를 알고있는 경우 JNA (기본 코드 작성의 번거 로움없이 JNI)을 사용하여 Windows API를 호출하여 ACL 데이터를 가져올 수 있습니다.

대체로 여기서 VBScript를 사용하여 파일 보안 세부 정보를 얻는 an article입니다. 이를 수정할 수 있고 세부 정보를 구문 분석 가능한 형식 (예 : XML)으로 반환해야합니다. Runtime.exec() 또는 ProcessBuilder을 사용하여 "cscript.exe"를 실행하여 VBScript 파일을 호출 할 수 있습니다. 표준 출력에 ACL 정보를 기록하고 java.lang.Process에서 사용 가능한 스트림을 사용하여 프로세스 출력을 읽을 수 있습니다.

exec'ing vbscript가 약간 해킹 된 것처럼 보일 수도 있지만, 대부분의 코드가 이미 작성되어 작동 중이므로 빠른 시작으로 이동하게됩니다. (필자는이 기사에서 스크립트를 시도하지 않았습니다.) 스크립트를 사용하면 관련 Win32 API를 JNA를 통해 Java에 매핑 할 필요가 없습니다.

3

mdmaanswer 자바 6에 가장 적합한 방법을 포함하지만 여기에 자바 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"); 
} 
+0

덕분에, 나는 또한에 대한 이메일 주소가 필요합니다 사용자 및 그룹. 그것을 얻는 방법은 무엇입니까? –