ACCESS_GRANTED
를 전달Authentication과 비슷하지만 Authorization은 특정 요청의 주체인 클라이언트의 접근 권한을 검증하는데 필요로 한다.
public interface GrantedAuthority extends Serializable {
String getAuthority();
}
인증
AuthenticationManager가 Authentication 객체에 설정 해준다.
인가
AccessDecisionManager가 해당 Authentication 객체에서 GrantedAuthority를 꺼내서 접근 권한을 결정한다
String으로 쉽게 GrantedAuthority를 조회한다
복잡한 케이스로 간주된 경우엔 getAuthority() 메서드에서 null을 리턴한다.
고객 계정 번호에 따라 적용할 작업과 권한 임계치 리스트를 저장하는 일 등이 있을 수 있다.
null을 리턴했다는 것은 복잡한 GrantedAuthority를 의미하고 AccessDecisionManager에 구체적인 코드가 있어야 한다는 뜻이다.
한 가지 GrantedAuthority 구현체와 SimpleGrantedAuthority 를 제공한다
사용자가 지정한 String을 GrantedAuthority로 변환해준다, Security Architecture 에 속한 모든 AuthenticationProvider는 Authentication 객체에 값을 채울 때 SimpleGrantedAuthority를 사용한다
public final class SimpleGrantedAuthority implements GrantedAuthority {
private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
private final String role;
public SimpleGrantedAuthority(String role) {
Assert.hasText(role, "A granted authority textual representation is required");
this.role = role;
}
@Override
public String getAuthority() {
return this.role;
}
SimpleGrantedAuthority 클래스는 String 형태의 사용자의 권한에 해당하는 문자열을 GrantedAuthority 로 반환해준다.
Spring Security는 method invocation이나 웹 요청 같은 보안 객체에 대한 접근을 제어하는 인터셉터를 제공한다
이에 호출을 허용할지 말지를 결정하는 pre-invocation 결정은 AccessDecisionManager에서 결정을 한다
AbstractSecurityInterceptor에서 호출되며 최종적인 접근 제어를 결정한다
void decide(Authentication authentication, Object secureObject, Collection<ConfigAttribute> attrs) throws AccessDeniedException;
boolean supports(ConfigAttribute attribute);
boolean supports(Class clazz);
decide
권한 부여하기 위한 결정을 내리는 데 필요한 모든 정보가 메서드에 전달된다, secureObject를 전달하면 실제 보안 객체를 실행할 때 인자를 검사할 수 있다.
supprots(ConfigAttribute)
기동 시점에 AbstractSecurityInterceptor가 호출하며 AccessDecisionManager가 전달되 ConfigAttribute의 처리 가능 여부를 결정한다
supports(Class)
Security interceptor 구현체가 호출하며 설정해둔 AccessDecisionManager에서 Security interceptor가 제출할 보안 객체 타입을 지원하는지 확인한다