Authentication
, 모든 구현이 개체 Authentication
목록을 저장하는 방법을 설명한다. GrantedAuthority
는 본인에게 부여된 권한을 나타낸다.
개체는 GrantedAuthority
개체에 삽입되고 나중에 권한 부여 결정을 내릴때 둘 중 하나에 의해 읽힌다.
아래는 GrantedAuthority
하나의 메서드만 있는 인터페이스다.
String getAuthority();
이 방법을 사용하면 Authorizationmanager
의 정확한String
표현을 얻을 수 있다.
Spring Security
는 메소드 호출
또는 웹 요청
과 같은 보안 객체에 대한 액세스를 제어하는 인터셉터
를 제공한다.
AuthorizationManager
AccessDecisionManager
및 AccessDecisionVoter
을 모두 대체한다.
AccessDecisionManager
를 사용 하도록 변경 하거나 사용자 지정하는 응용 프로그램이다.
AuthorizationManagers
는 AuthorizationFilter
에 의해 호출되며 최종 액세스 제어 결정을 내릴 책임이 있다.
AuthorizationManager
인터페이스에는 두 가지 메서드가 있다.
AuthorizationDecision check(Supplier<Authentication> authentication, Object secureObject);
default AuthorizationDecision verify(Supplier<Authentication> authentication, Object secureObject)
throws AccessDeniedException {
}
사용자가 권한 부여
의 모든 측면을 제어하기 위해 자신의 것을 구현할 수 있지만, Spring Security
는 Authorizationmanager
를 위임한다.
계층적 역할
이라는 것은 특정 역할
이 다른 역할
을 포함
하는 것이다.
예를 들어서 USER
, MANAGER
, ADMIN
3개의 권한이 있다.
(권한은 오름차순으로 높다.)
따라서 MANAGER
는 USER
의 권한을 가지고 있어야 하고, ADMIN
은 USER
, MANAGER
2개의 권한을 모두 다 가지고 있어야 한다.
이러한 계층적 역할을 지원하는 RoleVoter
은 RoleHierarchyVoter
로 구성되어 RoleHierarchy
사용자에게 할당된 모든 접근 가능한 권한
을 얻는다.
@Bean
AccessDecisionVoter hierarchyVoter() {
RoleHierarchy hierarchy = new RoleHierarchyImpl();
hierarchy.setHierarchy("ROLE_ADMIN > ROLE_STAFF\n" +
"ROLE_STAFF > ROLE_USER\n" +
"ROLE_USER > ROLE_GUEST");
return new RoleHierarchyVoter(hierarchy);
}