[NIO.2]제1 6 편 속성 보기 의 ACL View

6495 단어 자바NIO.2
접근 제어 목록(ACL)은 접근 파일 을 정확하게 제어 할 수 있 는 권한 목록 입 니 다.ACL 은 파일 소유자,권한,그리고 각종 유형의 파일 표 지 를 제어 합 니 다.NIO.2 는 ACL 을 지원 하기 위해 AclFileAttributeView 를 제공 했다.
Files.getFileAttributeView()를 사용 하여 ACL 가 져 오기
ACL 의 내용 을 본 적 이 없다 면 다음 코드 를 사용 해 보 세 요.Files.getFileAttributeView()를 사용 하여 ACL 을 가 져 왔 습 니 다.이 방법 을 사용 한 반환 값 형식 은?  List
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.attribute.AclEntry; 
import java.nio.file.attribute.AclFileAttributeView; 
import java.util.List; 
… 
List acllist = null; 
Path path = Paths.get("C:/rafaelnadal/tournaments/2009", "BNP.txt"); 

AclFileAttributeView aclview = Files.getFileAttributeView(path, AclFileAttributeView.class); 
try { 
    acllist = aclview.getAcl(); 
} catch (IOException e) { 
    System.err.println(e); 
}

Files.getAttribute()를 사용 하여 ACL 가 져 오기
일반적인 방법 getAttribute()를 사용 하여 ACL 을 가 져 올 수 있 습 니 다:
import static java.nio.file.LinkOption.NOFOLLOW_LINKS; 
… 
List acllist = null; 
Path path = Paths.get("C:/rafaelnadal/tournaments/2009", "BNP.txt"); 

try { 
    acllist = (List) Files.getAttribute(path, "acl:acl", NOFOLLOW_LINKS); 
} catch (IOException e) { 
    System.err.println(e); 
}

ACL 속성 보 기 는 다음 속성 명 을 지원 합 니 다.
  • acl
  • owner
  • 속성 에 접근 하 는 일반적인 구 조 는[view-name:]attribute-name 입 니 다.여기 서 view-name 은 acl 입 니 다.
    ACL 레코드 읽 기
    앞의 두 가지 예 는 ACL 목록 을 가 져 오 는 방법 을 보 여 주 었 습 니 다.반환 값 은 모두 AclEntry 대상 을 저장 하 는 List 입 니 다.AclEntry 대상 은 ACL 의 입구 에 대응 합 니 다.각 AclEntry 대상 은 아래 네 부분 으로 구성 되 어 있 습 니 다.
  •     Type:입구 의 유형,사용 가능 한 값:ALARM,ALLOW,AUDIT,또는 DENY.
  •     Principal:입구 에서 허용 하 는 신분 으로 UserPrincipal 류 를 매 핑 합 니 다
  •     Permissions:한 그룹의 권한,맵 Set.
  •     Flags:항목 이 어떻게 계승 되 고 전파 되 는 지 표시 하 는 표지 세트 입 니 다
  • 아래 코드 로 ACL 목록 을 옮 겨 다 니 며 입구 마다 자세 한 정 보 를 출력 할 수 있 습 니 다.아래 의 예 는 앞의 예 에서 얻 은 aclist 를 출력 합 니 다.
    for (AclEntry aclentry : acllist) { 
           System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++"); 
           System.out.println("Principal: " + aclentry.principal().getName()); 
           System.out.println("Type: " + aclentry.type().toString()); 
           System.out.println("Permissions: " + aclentry.permissions().toString()); 
           System.out.println("Flags: " + aclentry.flags().toString()); 
    }
    

    다음은 윈도 7 에서 실 행 된 결과 입 니 다.
    ++++++++++++++++++++++++++++++++++++++++++++++++++++ 
    Principal: BUILTIN\Administrators 
    Type: ALLOW 
    Permissions: [WRITE_OWNER, READ_ACL, EXECUTE, WRITE_NAMED_ATTRS, READ_ATTRIBUTES, 
    READ_NAMED_ATTRS, WRITE_DATA, WRITE_ACL, READ_DATA, WRITE_ATTRIBUTES, SYNCHRONIZE, DELETE, 
    DELETE_CHILD, APPEND_DATA] 
    Flags: [] 
    ++++++++++++++++++++++++++++++++++++++++++++++++++++ 
    Principal: NT AUTHORITY\SYSTEM 
    Type: ALLOW 
    Permissions: [WRITE_OWNER, READ_ACL, EXECUTE, WRITE_NAMED_ATTRS, READ_ATTRIBUTES, 
    READ_NAMED_ATTRS, WRITE_DATA, WRITE_ACL, READ_DATA, WRITE_ATTRIBUTES, SYNCHRONIZE, DELETE, 
    DELETE_CHILD, APPEND_DATA] 
    Flags: [] 
    ++++++++++++++++++++++++++++++++++++++++++++++++++++ 
    Principal: NT AUTHORITY\Authenticated Users 
    Type: ALLOW 
    Permissions: [READ_ACL, EXECUTE, READ_DATA, WRITE_ATTRIBUTES, WRITE_NAMED_ATTRS, 
    SYNCHRONIZE, DELETE, READ_ATTRIBUTES, READ_NAMED_ATTRS, WRITE_DATA, APPEND_DATA] 
    Flags: [] 
    ++++++++++++++++++++++++++++++++++++++++++++++++++++ 
    Principal: BUILTIN\Users 
    Type: ALLOW 
    Permissions: [READ_ACL, EXECUTE, READ_DATA, SYNCHRONIZE, READ_ATTRIBUTES, READ_NAMED_ATTRS] 
    Flags: []

    ACL 에 새 입 구 를 추가 합 니 다.
    AclEntry.Builder 의 build()방법 으로 새로운 ACL 입 구 를 만 들 수 있 습 니 다.사용자 에 게 새로운 접근 권한 을 추가 하려 면 다음 절 차 를 통 해:
  •     FileSystem.getUserPrincipalLookupService()방법 으로 사용 자 를 찾 습 니 다.
  •     ACL View 가 져 오기..
  •     AclEntry.Builder 대상 을 통 해 새 입 구 를 만 듭 니 다
  •     ACL 읽 기..
  •     새 입 구 를 삽입 합 니 다
  •     setAcl()또는 setAttribute()를 호출 하여 ACL 을 다시 씁 니 다
  • 앞의 절차 에 따라 아래 코드 세 션 은 apress 사용자 에 게 접근 권한 을 할당 하 는 방법 을 보 여 줍 니 다.
    import java.io.IOException; 
    import java.nio.file.Files; 
    import java.nio.file.Path; 
    import java.nio.file.Paths; 
    import java.nio.file.attribute.AclEntry; 
    import java.nio.file.attribute.AclEntryPermission; 
    import java.nio.file.attribute.AclEntryType; 
    import java.nio.file.attribute.AclFileAttributeView; 
    import java.nio.file.attribute.UserPrincipal; 
    import java.util.List; 
    import static java.nio.file.LinkOption.NOFOLLOW_LINKS; 
    … 
    try { 
        //Lookup for the principal 
        UserPrincipal user = path.getFileSystem().getUserPrincipalLookupService() 
    //Get the ACL view  
        AclFileAttributeView view = Files.getFileAttributeView(path,   
                                                 AclFileAttributeView.class); 
    
        //Create a new entry  
        AclEntry entry = AclEntry.newBuilder().setType(AclEntryType.ALLOW). 
                   setPrincipal(user).setPermissions(AclEntryPermission.READ_DATA,   
                   AclEntryPermission.APPEND_DATA).build(); 
    
        //read ACL 
        List acl = view.getAcl(); 
    
        //Insert the new entry 
        acl.add(0, entry); 
    
        //rewrite ACL 
        view.setAcl(acl);             
        //or, like this 
        //Files.setAttribute(path, "acl:acl", acl, NOFOLLOW_LINKS); 
    
    } catch (IOException e) { 
        System.err.println(e); 
    }

    메모:위의 예 에서 사용자 apress 를 사 용 했 습 니 다.만약 당신 의 기계 에 이 사용자 가 없다 면 자바.nio.file.attribute.UserPrincipal NotFoundException 이상 을 던 질 것 입 니 다.
    위의 코드 는 이미 존재 하 는 파일 의 ACL 에 새로운 입 구 를 추가 하 는 데 사용 할 수 있다.파일 을 새로 만 들 때 도 사용 할 수 있 습 니 다.
    메모:AclFileAttributeView 는 FileOwner AttributeView 에서 계승 되 기 때문에 getOwner()와 setOwner()방법 을 직접 호출 할 수 있 습 니 다.
    글 의 출처:
    http://www.aptusource.org/2014/03/nio-2-acl-view/

    좋은 웹페이지 즐겨찾기