예외 처리는 필터 체인 내에서 발생하는 예외를 의미하며 크게 인증예외와 인가예외로 나눌 수 있다.
예외를 처리하는 필터로서 ExceptionTranslationFilter가 사용되며 사용자 인증 및 인가 상태에 따라 로그인 재시도, 401, 403 등의 상태 코드로 응답할 수 있다.
[AuthenticationException]
SecurityContext에서 인증 정보가 삭제 - 기존의 Authentication이 더 이상 유효하지 않다고 판단하고 Authentication을 초기화한다.
AuthenticationEntryPoint 호출 - AuthenticationException이 감지되면 필터는 authenticationEntryPoint를 실행하고 이를 통해 인증 실패를 공통적으로 처리할 수 있으며 일반적으로 인증을 시도할 수 있는 화면으로 이동한다.
인증 프로세스 요청 정보를 저장하고 검색 - 인증 프로세스 동안 전달되는 요청을 RequestCache, SavedRequest에 저장하고 사용자가 인증을 완료한 후 요청을 검색해 재사용할 수 있다. 기본적으로 사용되는 구현은 HttpSessionRequestCache이다.
[AccessDeniedException]
AccessDeniedException이 감지되면 필터는 사용자가 익명 사용자인지를 먼저 판단한다. 그 다음 익명 사용자라면 인증 예외 처리가 실행되고 익명 사용자가 아니라면 AccessDeniedHandler에게 요청 처리를 위임한다.
📚 ExceptionTranslationFilter
[SecurityFilterChain 구성 - Spring Security는 필터의 집합체]