Permission
Permission (권한)
시스템 리소스에 대한 접근을 나타내는 추상 클래스입니다. 모든 권한은 이름(name)을 가지며, 이름의 해석은 하위 클래스에 따라 달라집니다.
본문
Permission은 시스템 리소스 접근을 표현하는 추상 클래스입니다. 모든 권한은 이름과 권한의 의미를 정의하는 추상 메서드를 가집니다. 대부분의 권한 객체는 허용되는 동작을 알려주는 "actions"(동작) 목록도 포함합니다.
예를 들어 java.io.FilePermission 객체의 경우 권한 이름은 파일(또는 디렉터리)의 경로 이름이고, actions 목록(예: "read, write")은 지정된 파일에 대해 허용되는 동작을 나타냅니다. java.lang.RuntimePermission처럼 actions 목록이 필요 없는 권한도 있습니다. 그런 권한은 이름을 가지느냐("system.exit" 등) 가지지 않느냐만 구분합니다.
각 하위 클래스가 반드시 구현해야 할 중요한 메서드는 implies 메서드로, 권한들을 비교합니다. "permission p1 implies permission p2"는 p1 권한이 부여되면 p2 권한도 자연스럽게 부여됨을 의미합니다. 즉 이는 동등성 테스트가 아니라 부분집합 테스트입니다.
Permission 객체는 일단 생성되면 불변(immutable)이며, 하위 클래스는 생성된 후 권한의 상태를 바꿀 수 있는 메서드를 제공해선 안 됩니다.
Permission의 주요 메서드는 다음과 같습니다.
public void checkGuard(Object object)— 권한에 대한 guard 인터페이스를 구현합니다.SecurityManager.checkPermission메서드를 호출해 권한을 검사하며, 거부되면SecurityException을 던집니다.public abstract boolean implies(Permission permission)— 지정된 권한의 동작이 이 객체의 동작에 "포함됨(implied)"인지 검사합니다.AccessController가 이 메서드를 사용해 접근 제어 결정을 내립니다.public abstract boolean equals(Object obj)— 두Permission객체의 동등성을 검사합니다. 접근 제어 결정에는equals가 아니라implies를 사용해야 합니다.public abstract int hashCode()— 이Permission객체의 해시 코드 값을 반환합니다.public final String getName()— 이 권한의 이름을 반환합니다.public abstract String getActions()— 동작을 문자열로 반환합니다. 하위 클래스는 정규 형식(canonical form)으로 반환해야 합니다.public PermissionCollection newPermissionCollection()— 주어진Permission객체에 대한 빈PermissionCollection을 반환합니다. 정의되지 않았으면null을 반환합니다.public String toString()— 이 권한을 설명하는 문자열을 반환합니다. 형식은("ClassName" "name" "actions")입니다.