seok의 패치노트

[Security] ExceptionTranslationFilter 본문

Spring/Security

[Security] ExceptionTranslationFilter

석석's 2021. 12. 29. 21:44

ExceptionTranslationFilter
 - 인증과 인가에 대한 예외를 처리하는 필터이다.
 - 시큐리티 필터중에 맨뒤에 있는 FilterSecurityInterceptor 바로앞에 존재한다.
 - 사용자에 요청을 받아 FilterSecurityInterceptor에게 전달해주기 위해 try~catch 로 감싸서 FilterSecurityInterceptor를 호출하여 전달한다.
 - FilterSecurityInterceptor에서 발생하는 인증,인가 예외는 자신을 호출한 ExceptionTranslationFilter에게 던진다.
 - FilterSecurityInterceptor가 던진 예외를 받아 AuthenticationException , AccessDeniedException 에 대해 처리하게된다.

 

 




 * AuthenticationException(인증) 관련처리
   1. 로그인 페이지로 이동  
       - 익셉션 발생시 AuthenticationEntryPoint 라는 이름을 가진 인터페이스를 호출하게 되는데 관련 구현체를 스프링 시큐리티가 제공해준다.(구현체는 우리가 만들어 커스텀하게 처리해도됨!!)
       - 처리 결과로 로그인페이지 이동 및 401 오류 코드를 전달한다.

   2. 사용자 최종 요청정보 저장 
      #RequestCache
         - 인증예외가 발생하기 전에 사용자의 마지막 요청정보를 저장해 두었다가 인증 완료후 저장해둔 마지막 요청정보를 읽어들여 이동하게 해준다.
         - savedRequest 구현체를 세션에 저장해두었다가 꺼내는 역활을 한다.
      #SavedRequest
         - 인증예외가 발생하기 이전 사용자가 요청했던 request 파라미터값 , 및 헤더값들을 저장하는 역활을한다.
         - 인터페이스이고 구현체는 시큐리티가 제공해준다.   

         - 세션 영역에 인증에 실패한 사용자의 마지막 요청정보를 남아둔다.



 * AccessDeniedException
    - 인가(권한) 예외 처리를 담당한다.
    - 유저가 권한이 없는곳에 요청했을경우 AccessDeniedHandler를 호출하여 예외를 처리할 수 있게 한다.      
    - AccessDeniedHandler 는 인터페이스 이며 구현체는 시큐리티가 제공한다.

 

 

AuthenticationEntryPoint 와 AccessDeniedHandler 에 대한 구현체를 직접만들어 설정한 모습