UnresolvedPermission

UnresolvedPermission (미해결 권한)

정책(Policy)이 초기화될 때 "미해결(unresolved)"이었던 권한(Permission)을 담는 데 사용하는 클래스예요. 미해결 권한이란 정책이 초기화되는 시점에 실제 권한 클래스가 아직 존재하지 않는 권한을 말해요.

출처: Java API Reference

본문

Java 런타임의 정책(코드에 어떤 권한이 허용되는지 지정)은 Policy 객체로 표현돼요. 정책이 초기화되거나 새로고침될 때마다, 정책이 허용하는 모든 권한에 대해 적절한 클래스의 Permission 객체가 만들어져요.

정책 구성에 참조되는 권한 클래스 타입 중 상당수는 로컬에 존재해요(즉 CLASSPATH에서 찾을 수 있는 것). 예를 들어 java.io.FilePermission은 CLASSPATH에서 발견되므로 항상 인스턴스화할 수 있어요. 그러나 다른 권한 클래스는 정책 초기화 동안 아직 존재하지 않을 수 있어요. 예를 들어 참조된 권한 클래스가 나중에 로드될 JAR 파일에 있을 수 있죠. 그런 각 클래스에 대해 UnresolvedPermission이 인스턴스화돼요.

UnresolvedPermission은 본질적으로 권한에 대한 정보를 담는 "자리 표시자(placeholder)"예요. 나중에 코드가 이전에 미해결이었지만 클래스가 그 사이 로드된 타입의 권한에 대해 AccessController.checkPermission(java.security.Permission)을 호출하면, 이전에 미해결이던 그 타입의 권한들이 "해결(resolved)"돼요. 즉 각 UnresolvedPermission에 대해 UnresolvedPermission의 정보에 기반해 적절한 클래스 타입의 새 객체가 인스턴스화돼요.

새 클래스를 인스턴스화하기 위해 UnresolvedPermission은 클래스가 0개, 1개, 및/또는 2개의 인자를 받는 생성자를 제공한다고 가정해요.

  • 0-인자 생성자 — 이름과 actions 없이 권한을 인스턴스화
  • 1-인자 생성자 — String name을 입력으로 받는 것으로 가정
  • 2-인자 생성자 — String name과 String actions를 받는 것으로 가정
public final class UnresolvedPermission
    extends Permission

getActions()는 빈 문자열을 반환하고, implies()는 항상 false를 반환해요. 이 클래스는 Permission을 확장하지만 동작은 주로 해석 시점에 실제 권한으로 변환되는 정보 홀더에 가까워요.

더 알아보기 (Learn more)

Java 공식 API