문제
위와 같은 Spring Security의 Filter Chain이 있다.
범용적으로 Jwt 에러를 해결하기 위해, 서블렛으로 넘어가기 전에 JwtExceptionFilter에서 Jwt 만료 등의 에러가 발생 시 Exception을 던져 주고 있었다.
그런데 다른 곳에서는 Cors 에러가 발생하지 않다가, 갑자기 에러가 발생하기 시작했다.
해결
@RequiredArgsConstructor
@EnableWebSecurity
@Configuration
public class SecurityConfig {
private final JwtUtil jwtUtil;
private final CorsConfig corsConfig;
@Bean
public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.cors(AbstractHttpConfigurer::disable)
.csrf(AbstractHttpConfigurer::disable)
.headers((headers) ->
headers.frameOptions().sameOrigin()
)
.authorizeHttpRequests((auth) ->
auth.requestMatchers(antMatcher("/h2-dev/**")).permitAll()
.requestMatchers(antMatcher(HttpMethod.OPTIONS, "/**/*")).permitAll()
.requestMatchers(CorsUtils::isPreFlightRequest).permitAll()
.requestMatchers(antMatcher("/questions/**")).permitAll()
.requestMatchers(antMatcher("/accounts/signup"), antMatcher("/accounts/signin")).permitAll()
.anyRequest().permitAll()
)
.addFilter(corsConfig.securityCorsFilter())
.apply(new JwtSecurityConfig(jwtUtil));
return httpSecurity.build();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
addFilter(corsConfig.securityCorsFilter) 부분을 넣어서 해결했다.
corsConfig 클래스에는 CorsConfiguration(org.springframework.web.filter.CorsFilter) 객체를 생성하여 설정을 추가하는 메서드가 있다.
이렇게 하니 해결되었다.
'Programming > Spring' 카테고리의 다른 글
[도메인 주도 개발 시작하기] 8장. 애그리거트 트랜잭션 관리 (0) | 2023.05.03 |
---|