전체 보기
🍀

Security 권한 계층 구조 적용(SpringBoot3 기준), 분산 트랜잭션

작성일자
2023/07/03
태그
DIARY_DEVELOP
프로젝트
FIS
책 종류
1 more property

권한 계층 구조 RoleHierarchyImpl(SpringBoot3)

SpringBoot 3 기준으로 공식 문서를 보고 작성한다.
SecurityConfig 내용은 여타 프로젝트와 다를 거 없다.
@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf(csrf -> csrf.disable()) // csrf 보안 토큰 사용 x .httpBasic(httpBasic -> httpBasic.disable()) // 매 요청마다 id, pwd 보내는 방식 사용 x .formLogin(formLogin -> formLogin.disable()) // formLogin 사용 x .sessionManagement(sessionManagement -> sessionManagement .sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // 세션 사용 x .cors(cors -> cors.configurationSource(corsConfigurationSource())) .addFilterBefore(jwtAuthorizationFilter(), UsernamePasswordAuthenticationFilter.class) .addFilterBefore(jwtExceptionFilter(), JwtAuthorizationFilter.class) .exceptionHandling(exceptionHandling -> exceptionHandling.authenticationEntryPoint(customAuthenticationEntryPoint)) .exceptionHandling(exceptionHandling -> exceptionHandling.accessDeniedHandler(customAccessDeniedHandler)) .authorizeRequests(authorizeRequests -> authorizeRequests.expressionHandler(expressionHandler())) // 추가됨 .authorizeRequests(authorize -> authorize .requestMatchers("/api/v1/auth/**").permitAll() .anyRequest().hasRole("TEACHER") ); return http.build(); }
Java
복사
다만 특이한 점은 요 아래 코드가 하나 더 붙는 단 점이다
@Bean public RoleHierarchyImpl roleHierarchy() { RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl(); roleHierarchy.setHierarchy("ROLE_DIRECTOR > ROLE_TEACHER"); return roleHierarchy; } @Bean public DefaultWebSecurityExpressionHandler expressionHandler() { DefaultWebSecurityExpressionHandler expressionHandler = new DefaultWebSecurityExpressionHandler(); expressionHandler.setRoleHierarchy(roleHierarchy()); return expressionHandler; }
Java
복사
이 두 메서드를 통해 hasRole("TEACHER")가 hasAnyRole('TEACHER','DIRECTOR') 와 같은 의미가 된다.
분산 트랜잭션, db 잠금 (알아보기만 했다,,,,, 정리는 x)