Authentication 객체는 principal에게 부여한 권한인 GrantedAuthority를 AuthenticationManager에게 입력받는다.AccessDecisionManager가 GrantedAuthority를 읽어 권한을 결정한다.GrantedAuthority는 메서드가 하나인 인터페이스다.
String getAuthority();
AccessDecisionManager는 GrantedAuthority가 반환하는 String을 쉽게 읽을 수 있다.GrantedAuthority를 쉽게 만들 수 있는 SimpleGrantedAuthority를 제공한다.
String을 GrantedAuthority로 변환해준다.AuthenticationProvider도 SimpleGrantedAuthority를 사용한다.AccessDecisionManager가 메서드 호출을 허용할지, pre-invocation 결정 등을 내린다.AuthorizationManager는 AccessDecisionManager와 AccessDecisionVoter를 모두 대체한다.
AccessDecisionManager와 AccessDecisionVoter는 레거시 컴포넌트이다.AccessDecisionManager나 AccessDecisionVoter를 커스텀하는 애플리케이션은 AuthorizationManager를 사용하도록 바꾸는 것을 권장한다.AuthorizationFitler라 불리며 접근 제어의 최정 결정 책임을 맡고 있다.AuthorizationManaber 인터페이스는 두 메서드를 가지고 있다.
AuthorizationDecision check(Supplier<Authentication> authentication, Object secureObject);
default AuthorizationDecision verify(Supplier<Authentication> authentication, Object secureObject)
throws AccessDeniedException {
// ...
}
check 메서드는 인가 결정을 내리기 위한 모든 관련 정보를 전달 받는다.verify 메서드는 check를 호출하며 잘못된 AuthorizationDecision에 대해 AccessDeniedException을 던질 수도 있다.AuthorizationManager들끼리 협력할 수 있는 위임 AuthorizationManager들을를 제공한다.
RequestMatcherDelegatingAuthorizationManager가 요청에 일치하는 가장 적절한 위임 AuthorizationManager이다.AuthorizationManagerBeforeMethodInterceptor와 AuthorizationManagerAfterMethodInterceptor를 사용할 수 있다.
AuthorizationManagerAuthentication의 권한들로 구성되어 있다.Authentication에 권한들이 포함되어 있으면 긍정적인 AuthorizationDecision을 반환한다.AuthorizationManager를 구현할 수도 있다.