PrivilegedAction
PrivilegedAction (특권 행동)
권한(privilege)을 가진 상태에서 실행되는 계산을 나타내는 인터페이스입니다. AccessController.doPrivileged 메서드에 인자로 전달되는 액티비티를 캡슐화합니다.
본문
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());