-
Spring Security - 권한 계층 구조 설정 (RoleHierarchy)Spring/Security 2024. 5. 10. 09:34728x90반응형
GitHub - dukbong/Practice-Spring-Security: 세션 기반 인증 - 예시
세션 기반 인증 - 예시. Contribute to dukbong/Practice-Spring-Security development by creating an account on GitHub.
github.com
RoleHierarchy 사용목적
RoleHierarchy는 Spring Security에서 역할(Role) 간의 계층 구조를 정의하여 권한을 상속받을 수 있게 하는 유용한 기능입니다.
이를 통해 권한 간의 관계를 설정하고, 코드의 가독성을 향상시킬 수 있습니다.
예를 들어, 계층 구조를 설정하면 상위 역할이 하위 역할을 자동으로 포함하므로, 보안 정책을 간단하고 효율적으로 관리할 수 있습니다.
RoleHierarchy 사용방법
다음은 RoleHierarchy를 설정하고 사용하는 기본적인 예시입니다.
@Configuration @EnableWebSecurity public class SecurityConfig { @Bean RoleHierarchy roleHierarchy() { RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); roleHierarchyImpl.setHierarchy("ROLE_D > ROLE_C > ROLE_B > ROLE_A"); return roleHierarchyImpl; } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequest(auth -> { auth.requestMatchers("/user").hasAnyRole("A"); auth.requestMatchers("/manager").hasAnyRole("B"); auth.requestMatchers("/admin").hasRole("C"); auth.requestMatchers("/secert").hasRole("D"); }); } }이 코드는 "ROLE_D > ROLE_C > ROLE_B > ROLE_A" 계층 구조를 설정하고, 특정 경로에 대한 권한을 부여하는 예시입니다.
여기서 "ROLE_D"는 가장 높은 권한이며, 이 계층 구조에 따라 "ROLE_C" 이하의 권한을 가진 모든 사용자는 "ROLE_D"에 포함됩니다.
RoleHierarchy 사용시 주의할 점
`RoleHierarchy`는 계층 구조에 따라 권한을 상속하므로, 특정 역할을 가진 사용자가 다른 역할에 접근할 수 있습니다.
예를 들어, /admin 경로에 hasRole("C")를 사용하면 "ROLE_C"는 물론 "ROLE_D"도 접근할 수 있습니다.
이 때문에 특정 경로에 대한 제한을 강화하려면 RoleHierarchy에서 해당 관계를 제거해야 합니다.
계층 구조 변경으로 특정 권한 제한
@Bean public RoleHierarchy roleHierarchy() { RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl(); roleHierarchy.setHierarchy("ROLE_D > ROLE_B > ROLE_A"); // ROLE_C 제거 return roleHierarchy; }이러한 변경으로 계층 구조를 조정하여 특정 권한을 가진 사용자가 접근할 수 있는 범위를 제한할 수 있습니다.
728x90반응형'Spring > Security' 카테고리의 다른 글
[Spring-Security 6.3.0-M1] 권한 계층 RoleHierarchy (0) 2024.05.29 Spring Security - 세션 생성 정책 (0) 2024.05.13 Spring Security - Session 생성 및 파기 이벤트 (2) 2024.05.12