Role Enum이란
@Getter
@RequiredArgsConstructor
public enum Role {
TYPE1("USER1"),
TYPE2("USER2"),
TYPE3("ADMIN")
}
Role이란 시스템을 사용하는 사용자의 역할을 말한다. 그 자체만으로 권한으로 사용할 수 있고 Depth를 한단계 더 두면 각 역할의 권한을 따로 설정할 수도 있다.
(Ex : USER1, USER2는 읽기 권한, ADMIN은 읽기/쓰기 권한)
Role Enum의 목적
시스템 사용자의 각각 역할에 대해서 어떤 권한을 사용할 지 관리하는 것을 용이하게 함
Spring Security에서 Role을 통해 인증하는 과정
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.and()
.authorizeRequests()
.antMatchers("/admin/**").hasRole("TYPE3")
.antMatchers("/something/**").hasAnyRole("TYPE1", "TYPE2")
Spring Security 설정 중 antMatchers를 이용해서 어떤 경로에 대해 Role을 가진 사용자만 접근 가능하도록 설정할 수 있다.
사용자가 권한을 가지고 있는 지를 확인하는 절차
- 서버에 권한이 필요한 요청이 들어온다.
- Spring Security에 등록된 인증 Filter 혹은 인증 Interceptor가 요청을 가로채 인증을 시도한다.
- Security Context에 등록된 인증정보 Authentication을 읽어온다.
- Authentication의 getAuthorities() 를 통해 권한을 읽어온 후 권한을 확인한다.
- 권한이 있다면 인가하고, 없다면 Access를 deny 한다.
- 권한이 있어 인가되면 요청을 수행한다.
인가를 위한 인증 정보(Authentication) 등록
/**
* 참고 : org.springframework.security.core 패키지의 Authentication 인터페이스
*/
package org.springframework.security.core;
public interface Authentication extends Principal, Serializable {
...
Object getPrincipal();
Object getCredentials();
Collection<? extends GrantedAuthority> getAuthorities();
}
- 인증과 인가를 위해서 Authentication이라는 인증 정보를 Security Context에 등록해야 한다.
- Authentication은 Principal, Credential, Authorities 세 가지로 구성되어 있는데, 이때 권한 정보를 담는 Authorities 에 사용자의 Role을 담아줘야 한다.
- 문자열 “ROLE_ADMIN”이 아닌 “ADMIN”을 저장해야 하는데, “ROLE_” 접두사는 Spring Security에서 자동으로 붙여주기 때문이다.
728x90
'# Back-End > Spring' 카테고리의 다른 글
@ControllerAdvice를 이용한 예외처리 (2) | 2022.01.24 |
---|---|
@Vaild를 이용한 Validation 검증 (0) | 2022.01.24 |
@Secured, @PreAuthorized를 이용한 메소드 수준의 권한 적용 (0) | 2022.01.23 |
Spring Security란? (0) | 2022.01.23 |
JWT란? (0) | 2022.01.23 |
인증 방식 비교(서버 기반 인증, 토큰 기반 인증) (0) | 2022.01.23 |
Filter, Interceptor, AOP (필터, 인터셉터, AOP) (0) | 2022.01.23 |