ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Security - 권한 계층 구조 설정 (RoleHierarchy)
    Spring/Security 2024. 5. 10. 09:34
    728x90
    반응형

     

     

     

    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
    반응형
Designed by Tistory.