스프링 시큐리티

Ch01. 스프링 시큐리티 기본 API 및 Filter 이해 - 예외 처리 및 요청 캐시 필터(ExceptionTranslationFilter, RequestCacheAwareFilter)

webmaster 2022. 1. 15. 13:39
728x90

ExceptionTranslationFilter

  •  AuthenticationException
    • 인증 예외 처리
      1. AuthenticationEntryPoint 호출
        • 로그인 페이지 이동, 401 오류 코드 전달 
        • 다시금 인증을 실행하도록 해준다.
      2. 인증 예외가 발생하기 전의 요청 정보를 저장
        • 인증을 하기 전의 요청했던 자원정보를 인증이 완료가 되면 해당 자원으로 이동할 수 있도록 캐시에 자원을 저장한다.
        • RequestCache - 사용자의 이전 요청 정보를 세션에 저장하고 이를 꺼내 오는 캐시 메커니즘
        • SavedRequest - 사용자가 요청했던 request 파라미터 값들, 그 당시의 헤더 값들 등이 저장
  • AccessDeniedException
    • 인가 예외 처리
      • AccessDeniedHandler에서 예외 처리하도록 제공
  • 동작 과정
  • FilterSecurityInterceptor에서 요청을 받는데, 인증/인가 예외를 확인한다.
  • ExceptionTranslationFilter에서 인증 예외가 발생할 경우
    • AuthenticationEntryPoint에서 인증 실패 이후 처리를 한다.
    • HttpSessionRequestCache에서 이전 요청에서 가려고 했던 자원정보를 DefaultSavedRequest에 Session으로 저장하고, 인증을 성공했을 때에 세션에 저장한 자원으로 이동하도록 한다.
  • ExceptionTranslationFilter에서 인가 예외가 발생할 경우
    • AccessDeniedException에서 AccessDeninedHandler를 호출해서 후속처리를 한다.
  • http
            .exceptionHandling()
            /*
            .authenticationEntryPoint(new AuthenticationEntryPoint() {
                @Override
                public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
                    response.sendRedirect("/login");
                }
            })
             */
            .accessDeniedHandler(new AccessDeniedHandler() {
                @Override
                public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
                    response.sendRedirect("/denied");
                }
            })
    ;
  • 인증이 성공하게 되면 세션에 저장된 자원으로 이동하게 해준다.

 

728x90