PrivilegedAction

PrivilegedAction (특권 행동)

권한(privilege)을 가진 상태에서 실행되는 계산을 나타내는 인터페이스입니다. AccessController.doPrivileged 메서드에 인자로 전달되는 액티비티를 캡슐화합니다.

출처: Java API Reference

본문

PrivilegedAction 인터페이스는 권한을 가진 상태에서 실행되는 계산을 나타냅니다. run() 메서드를 정의하며, doPrivileged 호출 시 이 메서드가 호출됩니다.

이 인터페이스는 성공 여부를 나타낼 예외를 던지지 않는 계싼에 사용합니다. 실행 중 예외를 던질 수 있는 계산에는 PrivilegedExceptionAction을 사용합니다.

경고: 특권 코드(privileged code)는 실제로 필요로 하는 권한만 가져야 합니다. doPrivileged의 특권 범위(scope)를 좁히려면 권한과 관련된 AccessControlContext를 인자로 받는 doPrivileged 변형을 사용해야 합니다. 리소스 취득(파일 열기, 소켓 열기 등)은 리소스가 생성된 후 실행되는 다음 명령에서 즉시 해제되어야 합니다.

PrivilegedAction이 정의하는 메서드는 다음과 같습니다.

  • public T run() — 이 액티비티가 수행하는 계산을 실행합니다. 이 메서드는 AccessController.doPrivileged가 호출된 후 호출됩니다.

사용 예시는 다음과 같습니다.

// 파일 존재 여부 확인과 같은 특권 작업
boolean exists = AccessController.doPrivileged(
    (PrivilegedAction<Boolean>) () -> new File("test").exists());

더 알아보기 (Learn more)

Java 공식 API