0. 목차
- Spring Security 예외
- 예외 처리 흐름
- 예외 처리하기
- @ControllerAdvice로 예외처리 안되는 이유
1. Spring Security의 예외
- Security 필터에 의해 발생하는 예외 2가지
- 인증(Authentication) → AuthenticationException
- 인가(Authorization) → AccessDeniedException
2. 예외 처리 흐름
1) FilterSecurityInterceptor : 예외 터트림
2) ExceptionTranslationFilter : 예외 처리
- AuthenticationException(인증예외) 처리
AuthenticationEntryPoint
를 호출한다.기본적으로는 로그인 페이지로 이동 + HTTP 상태코드 401 세팅을 한다.
- 인증 예외가 발생하기 전의 요청 정보를 세션에 저장한다. 개발자는 RequestCache를 통해서 SavedRequest 를 추출하여 이전 요청 정보를 꺼내올 수 있다.
- AccessDeniedException(인가예외) 처리
AccessDeniedHandler
에 의한 예외 처리를 위임한다.
3 .예외 처리하기
@EnableWebSecurity
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
....
http.exceptionHandling()
.authenticationEntryPoint((request, response, authException) -> {
})
.accessDeniedHandler((request, response, accessDeniedException) -> {
});
}
}
4. @ControllerAdvice로 예외처리 안되는 이유
- FIlter에서 발생한 예외는 @ControllerAdvice의 적용범위 밖이다.