codingBird

TIL - 쇼핑몰 프로젝트(Plain Old) v1 → v2 9일 차. JwtExceptionFilter 본문

TIL

TIL - 쇼핑몰 프로젝트(Plain Old) v1 → v2 9일 차. JwtExceptionFilter

김뚜루 2023. 8. 30. 18:59
분명 CorsFilter가 정상적으로 동작하고 있을텐데…?

첫 출근을 기다리며 여유롭게 코테, SQL, 프로젝트 마이그레이션을 진행하고 있다.

인생의 낙원이 있다면 이게 아닐까 생각하는 요즘이다.

기능 대부분은 마이그레이션 완료했으니 가능하면 출근 전에 선착순 상품 구현해보도록 하자.

Filter 에서 발생하는 예외 처리

WebFlux는 Spring Security Interceptor가 없어 Filter에서 토큰 검증을 수행하고 decode된 값을 Handler Function의 Attribute로 넣어주고 있다.

기존 Interceptor는 DispatcherServelet과 Handler 사이에 위치해서 토큰 검증 시 예외가 발생하면 ControllerAdvice에서 처리할 수 있었지만 Filter는 보다 밖에 위치한 컴포넌트여서 에러처리를 위한 Filter를 구현해야 한다.

Ordered

하지만 필터에서 설정된 에러응답은 Filter의 Order에 따라 CORS를 처리하기 위한 응답헤더가 설정되지 않을 수도 있다. 이렇게 되면 브라우저 SOP 정책으로 CORS 가 발생하고 서버응답 또한 무시되니 Axios.Interceptor에서 응답코드 별로 구현한 로직이 정상적으로 동작하지 않게 된다.

원인을 파악하고 CorsFilter를 아래와 같이 Ordered를 최우선으로 설정하니 CORS가 해결되어 Axios.Interceptor가 정상적으로 동작할 수 있게 되었다.