ExceptionTranslationFilter
AbstractSecurityInterceptor 의 하위 클래스에서 AuthenticationException 타입의 예외가 발생하면 처리하는 필터입니다.
처리할 수 있는 예외가 발생하였다면 (AuthenticationException, AccessDeniedException) 인증과 인가에 대한 처리를 해줍니다.
- 인증실패 - sendStartAuthentication 메소드 호출
- 인가실패
2-1. 익명사용자(비로그인) : sendStartAuthentication 메소드 호출
2-2. 로그인 사용자 : accessDeniedHandler 에게 처리를 위임
- 인가 실패 핸들러 커스텀 구현
http.exceptionHandling() .accessDeniedHandler((request, response, accessDeniedException) -> { UserDetails principal = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); String username = principal.getUsername(); response.sendRedirect("/access-denied"); }); // 핸들러를 구현하여 인가 실패에 대한 처리
UsernamePasswordAuthenticationFilter 의 인증실패 예외처리
- UsernamePasswordAuthenticationFilter 에서 발생하는 인증실패 예외는 해당 필터의 상위 클래스에서 처리한다.
- AbstractAuthenticationProcessingFilter 의 unsuccessfulAuthentication 에서 SimpleUrlAuthenticationFailureHandler 의 onAuthenticationFailure 를 호출하고, 같은 클래스의 saveException 에서 세션에 에러를 저장하여 로그인 관련 필터로 처리를 위임한다.
'Spring > Spring Security' 카테고리의 다른 글
Spring Security (6) - LogoutFilter (0) | 2020.12.09 |
---|---|
Spring Security (5) - SecurityContextPersistenceFilter (0) | 2020.12.08 |
Spring Security (4) - 기본설정과 JPA 연동 (0) | 2020.09.15 |
Spring Security (3) - Authentication (0) | 2020.09.09 |
SpringSecurity - Test 작성 (0) | 2020.09.07 |