2022. 7. 13. 20:49ㆍWeb/Spring
목적 : Authorization, FilterSecurityInterceptor, AccessDecisionManager, AccessDecisionVoter 이해
Authorization
지난 번에 확인했던 Authentication과 연결이 된다.
GrantedAuthority 객체는 AuthenticationManager를 통해 Authentication에 저장이 되는데 후에 Authorize를 할 대 AuthorizationManager에서 읽는다.
여기서 살펴볼 부분은 GrantedAuthority의 getAuthority 메소드다.
String getAuthority();
getAuthority 메소드는 AuthorizationManager가 특정한 String을 얻도록 한다. String을 리턴한 getAuthority는 AuthorizationManager와 AccessDecisionManager에 의해 읽혀진다.
AuthorizationManager
AuthrizationManager는 AccessDecisionManager와 AccessDecisionVoter 로 대체될 수 있다.
AuthrizationManager는 AuthorizationFilter에 의해 호출되고 최종 결정에 접근할 수 있게 한다. AuthorizationManager 인터페이스는 두 개의 메소드(check, verify)를 포함한다.
AuthorizationDecision check(Supplier<Authentication> authentication, Object secureObject);
default AuthorizationDecision verify(Supplier<Authentication> authentication, Object secureObject)
throws AccessDeniedException {
// ...
}
- check 매소드는 Authorization을 하는 데 필요한 관련한 정보를 넘긴다.
- verify는 check를 호출하고, 만약 AuthroizationDecision이 실패한다면 AccessDeniedException를 발생시킨다.
AccessDecisionManager & AccessDecisionVoter
AccessDecisionManager는 AbstractSecurityInterceptor에 의해 호출 되고 최종 관리 결정을 만드는 데에 책임이 있다.
AccessDecisionManager 인터페이스는 세 가지 메소드가 있다.
void decide(Authentication authentication, Object secureObject,
Collection<ConfigAttribute> attrs) throws AccessDeniedException;
boolean supports(ConfigAttribute attribute);
boolean supports(Class clazz);
- decide : Authrization에 관련한 정보를 넘긴다.
- supports(ConfigAttribute) : AbstractSecurityInterceptor가 시작할 때, ConfigAttribute를 전달하며 AccessDecisionManager가 진행할 수 있을지 결정할 때 호출된다.
- supports(Class) : security interceptor implementation 에 의해 호출되고, 설정된 AccessDecisionManager가 security interceptor가 나타내는 특정한 보안 타입을 지지하고 있는지 확인한다.
이 두 관계는 아래 그림과 같다.
AccessDecisionVoter 인터페이스는 세 개의 메소드가 있다.
int vote(Authentication authentication, Object object, Collection<ConfigAttribute> attrs);
boolean supports(ConfigAttribute attribute);
boolean supports(Class clazz);
- vote : int를 반환하하는데 이는 ACCESS_ABSTAIN, ACCSS_DENIDE, ACCESS_GRANTED를 나타낸다.
(ACCESS_ABSTRAIN은 authorization 결정이 없다면, 결정권이 있다면 ACCESS_DENIED와 ACCESS_GRANTED를 리턴한다.)
RoleVoter
참고
'Web > Spring' 카테고리의 다른 글
[Spring] Spring Security - OAuth2 사용해보기 (2) (0) | 2022.08.14 |
---|---|
[Spring] Spring Security - OAuth2 사용해보기 (1) (0) | 2022.07.29 |
[Spring] Spring Security 기본 이해 - (4) (0) | 2022.07.10 |
[JPA] Spring Envers 사용하기 (1) (0) | 2022.07.07 |
[JPA] Hibernate Envers 오류 : Such mapping is possible, but has to be explicitly defined using @Audited (0) | 2022.07.04 |