왜 리팩토링 하였는가?
현재 프로젝트 내에서 스프링 시큐리티를 적용중이다.
특정 URI를 특정 ROLE을 가진 유저가 허용하려면, SecurityConfig 내에서 URI를 열거식으로 나열해야 한다.
이 때, 관리하기 어려움이 있다. 따라서 Enum 클래스로 분리하여 리팩터링 하였다.
스프링 시큐리티 설정을 할 수 있는 SecurityConfig 클래스 내에서 특정 URI를 허용하기 위해 다음과 같이 Enum 클래스로 리팩토링을 진행하였다.
@SecurityConfig 클래스
http.authorizeHttpRequests 내에서, AuthorizationList.LIST.getAuthroities()를 이용하여, 권한 설정을 관리하였다.
@EnableWebSecurity
@Configuration
@RequiredArgsConstructor
public class SecurityConfig {
private final JwtTokenProvider jwtTokenProvider;
private final RedisUtil redisUtil;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable);
http.formLogin(AbstractHttpConfigurer::disable);
http.httpBasic(AbstractHttpConfigurer::disable);
http.authorizeHttpRequests((auth) -> auth
.requestMatchers(AuthorizationList.LIST.getAuthorities()).permitAll()
.anyRequest().authenticated());
http.addFilterBefore(new JwtTokenAuthenticationFilter(jwtTokenProvider, redisUtil), UsernamePasswordAuthenticationFilter.class);
http.sessionManagement((session) -> session
.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
return http.build();
}
AuthorizationList Enum 클래스
Collections.unmodifiableList()을 통해 대상이 불변 리스트인걸 보장하였고, getAuthorities() 메서드를 통해 리스트의 대상을 반환하였다.
@Getter
public enum AuthorizationList {
LIST(Collections.unmodifiableList(Arrays.asList(
"/api/v1/auth/login",
"/api/v1/users",
"/docs/**",
"/api/v1/users/validations/loginId",
"/api/v1/users/weinlogin",
"/api/v1/users/join",
"/api/v1/mails/auth-codes",
"/api/v1/mails/verification_codes"
)));
private final List<String> authorities;
AuthorizationList(List<String> authorities) {
this.authorities = authorities;
}
public String[] getAuthorities() {
return authorities.toArray(new String[0]);
}
}
'프로젝트 > Ku:room' 카테고리의 다른 글
개발자 겸 디자이너 겸 PM 도전기 (0) | 2025.02.14 |
---|---|
nGrinder 스크립트 검증 도중 Connection refused (1) | 2025.02.13 |
QueryDSL로 동적 쿼리 가져오기 (0) | 2025.02.13 |
각 상황에 맞는 @ControllerAdvice로 예외 메시지 분리하기 (0) | 2025.02.13 |
이메일 인증 기능 @Async 비동기 처리 (0) | 2025.02.08 |