AccessController — 접근 제어 컨트롤러

AccessController — 접근 제어 컨트롤러

접근 제어 결정을 내리고 권한 있는(privileged) 코드를 실행하는 데 사용하는 정적 메서드들을 제공하는 클래스예요. doPrivileged는 지정한 동작을 권한을 활성화한 상태로 수행하고, checkPermission은 지정한 권한에 대한 접근을 허용할지 판단해요. 이 클래스는 직접 인스턴스화할 수 없어요.

출처: Java API Reference

본문

권한 있는 동작 실행 (doPrivileged)

  • public static <T> T doPrivileged(PrivilegedAction<T> action) — 지정한 PrivilegedAction을 권한을 활성화한 상태로 수행해요. 동작은 호출 스택의 접근 제어 컨텍스트에 포함된 모든 권한으로 수행돼요.
  • public static <T> T doPrivilegedWithCombiner(PrivilegedAction<T> action) — 지정한 PrivilegedAction을 권한을 활성화한 상태로 수행해요. 기존 DomainCombiner가 있으면 재사용돼요.
  • public static <T> T doPrivileged(PrivilegedAction<T> action, AccessControlContext context) — 지정한 동작을 권한을 활성화한 상태로, 주어진 AccessControlContext로 제한해 수행해요.
  • public static <T> T doPrivilegedWithCombiner(PrivilegedAction<T> action, AccessControlContext context) — 주어진 컨텍스트로 제한하고 DomainCombiner를 재사용해 수행해요.
  • public static <T> T doPrivileged(PrivilegedExceptionAction<T> action) throws PrivilegedActionException — checked 예외를 던질 수 있는 PrivilegedExceptionAction을 권한을 활성화한 상태로 수행해요.

컨텍스트와 권한 검사

  • public static AccessControlContext getContext() — 현재 호출 컨텍스트의 "스냅샷"을 AccessControlContext 객체로 만들어 반환해요.
  • public static void checkPermission(Permission perm) throws AccessControlException — 지정한 권한이 나타내는 접근 요청을 허용할지 거부할지, 실행 스레드의 현재 보안 정책과 컨텍스트에 따라 판단해요. 거부되면 AccessControlException을 던져요.
try {{
    FileInputStream fis = AccessController.doPrivileged(
        new PrivilegedExceptionAction<FileInputStream>() {{
            public FileInputStream run() throws FileNotFoundException {{
                return new FileInputStream("someFile");
            }}
        }});
}} catch (PrivilegedActionException e) {{
    throw (FileNotFoundException) e.getException();
}}

doPrivileged를 사용할 때는 권한 있는 코드 구간을 가능한 한 작게 유지하는 것이 중요해요.

더 알아보기 (Learn more)