Programming/Spring
[Spring] JwtException에서만 Cors에러가 발생할 때
선의
2023. 10. 29. 23:27
문제
위와 같은 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) 객체를 생성하여 설정을 추가하는 메서드가 있다.
이렇게 하니 해결되었다.