티스토리 뷰

Spring

Spring Security - 아키텍쳐 ExceptionTranslationFilter

사용자 엔꾸꾸 2019. 9. 21. 00:52

Spring Security - ArcheTecher_ExceptionTranslationFilter

  • Spring Security 에서 인증과, 인가 과정에서 예외가 발생할 경우 이를 어떻게 처리하는지 알아보자.
  • 인증과 인가 과정에서 발생하는 예외
    • AuthenticationException (인증)
    • AccessDeniedException (인가)

ExceptionTransalcationFilter

  • FilterChainProxy가 호출하는도중 발생하는 예외를 처리하는 예외 처리기
  • AccessDeniedException과 AuthenticationException을 처리하는 필터이다.
  • 핵심 메서드는 HandleSpringSecurityException()

 

 

HandleSpringSecurityException

 

  • ExceptionTransalcationFilter의 핵심 메서드
  • 인증 과정중 AuthenticationException 예외가 발생한다면, AuthenticationEntryPoint를 실행하여 인증을 유도한다.

 

  • 인가 과정중 AccessDeniedException 예외가 발생하면 먼저 현재 Authentication이 익명사용자 (AnonymousUser) 인지 확인한다.
  • 만약 익명사용자라면 AuthenticationEntryPoint를 실행하여 인증을 유도한다.
  • 익명사용자가 아니라면, AccessDeninedHandler 에게 위임한다.

 

AbstractAuthenticationProcessingFilter

  • ExceptionTranslationFilter가 모든 SecurityFilter의 AuthenticationException, AccessDeniedException예외 처리를 담당하는 것은 아니다.
  • UsernamePasswordAuthenticationFilter에서 AuthenticationException이 발생하는 경우 UsernamePasswordAuthenticationFilter의 부모클래스인 AbstractAuthenticationProcessingFilter 에서 예외처리를 담당한다.

 

AbstractAuthenticationProcessingFilter의 doFilter

  • 인증 과정에서 AuthenticationException 혹은 InternalAuthenticationServiceException 예외가 발생할 경우 unsuccessfulAuthentication 메서드를 호출하여 예외 처리를 진행한다.

 

 

unsuccessfulAuthentication

  • unsuccessfulAuthentication 내부에서는 AuthenticationFailureHandler를 사용하여 에러 메시지를 포함한 로그인 페이지를 보여주는 등의 액션을 취하게 된다.

 

 

정리
  • Spring Security 에서 인증과, 인가 과정에서 예외가 발생할 경우 ExceptionTranslationFilter가 이를 담당한다.
    • AuthenticationException 예외가 발생한 경우라면, 다시금 인증을 하도록 이를 유도하게 되고
    • AccessDeniedException 예외가 발생했다면 익명 사용자인지 확인, 익명사용자라면 인증을 유도하며, 익명사용자가 아니라면 accessDeninedHandler에게 이를 위임한다.
  • 모든 Security 필터에서 발생하는 AuthenticationException, AccessDeniedException 처리를 담당하는 것은 아니다.
    • UsernamePasswordAuthenticationFilter에서 발생한 예외의 경우에는 부모클래스인 AbstractAuthenticationProcessingFilter에서 이를 처리한다.
댓글
댓글쓰기 폼
공지사항
Total
75,658
Today
174
Yesterday
201
링크
TAG
more
«   2021/12   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
글 보관함