You will be fine

<Spring Security> 5. FilterChainProxy에 들어가는 Filter들 분석하기

by BFine
반응형

FilterChainProxy

가. WebAsyncManagerIntegrationFilter

 a. 비동기 처리할때 SecurityContext 

  - WebAsyncManager는 request에 대한 비동기 Thread들을 중앙 관리하는 역할을 한다.   

  - WebAsyncManagerIntegrationFilterSecurityContextWebAsyncManager와 통합한다.

  - 즉 비동기 처리시 파생되는 Thread들에서도 SecurityContext에 접근할 수 있도록 해준다. 

     => ThreadLocalSecurityContext를 통합관리 

 

나. SecurityContextPersistenceFilter

a. Context연결하기

  - SecurityContextHolder는 주어진 SecurityContext를 현재 Thread에 연결시키는 역할을 한다.

  - SecurityContextPersistenceFilterSecurityContextHodlerSecurityContext를 제공한다. 

     => SecurityContextRepository에서 HttpSession키로 SecurityContext를 로드한다.

 

다. HeaderWriterFilter

 a. 헤더 추가

  -  HeaderWriterFilter는 현재 응답에 대해 브라우저 보호 헤더를 추가한다.

 

라. CsrfFilter

 a. Cross-Site Request Forgery

  - csrf 공격에 대한 보호기능을 하는 필터로 내부를 보면 crsf token을 생성하고 request에 등록한다.

 

마. LogoutFilter

 a. 로그아웃

  - 클라이언트가 로그아웃을 하면 인증정보에 대한 부분을 다 지워주는 과정이 필요하다

  - LogoutFilter를 보면 handler를 이용하여 csrf 토큰과 SecurityContext를 지우는 것을 볼수있다.

    => 마지막 handler에서는 logout 성공에 대한 등록처리를 진행한다.

 

 

바. ReqeustCacheAwareFilter

 a. 요청에 대한 캐시 처리

  - 이전 request에 대한 부분을 캐시하는 역할을 하는 필터이다. (HttpServletRequest 리턴) 

    => 예를들어 로그인 페이지로 리다이렉트 전에 요청한 URL을 저장하고 로그인 이후 처리 

 - 로그인 하지않고 /test 로 접근했을때 세션에 해당 request를 저장하는 것을 볼 수 있다.
   => key값은 "SPRING_SECURITY_SAVED_REQUEST"   

 

 

사. SecurityContextHolderAwareRquestFilter

 a. requset를 Wrapper로 감싸기

  - request를 SpringSecurity 용으로 감싸는 Wrapper 클래스를 생성하는 역할을 한다.

    => trustResolver는 AuthenticationTrustResolver이고 익명사용자인지, RememberMe 토큰여부 클래스를 저장한다.

 

아. AnonymousAuthenticationFilter

 a. 익명 요청

  -  인증정보가 없는 요청에 대해서 익명사용자 토근을 생성하고 Authentication에 등록처리하는 필터이다.

 

자. SessionManagementFilter

 a. 세션 관리하기

  - 세션에 SecurityContext가 있는지 여부를 확인하고 없는 경우에 Strategy로 처리 이후에 SecurityContext를 저장한다.

  - 일반적으로는 인증처리시에 세션에 SecurityContext 저장하기때문에 위의 과정은 skip된다.  

 

차. ExceptionTranslationFilter

 a. 예외처리

  - 뒤에 있는 필터 처리 중 발생하는 AuthenticationException, AccessDeniedException에 대한 부분을 핸들링한다.

  - 코드를 보면 발생한 Exception을 위의 두 종류인지 파악하여 SecurityException으로 분류하는 것을 볼 수 있다.  

     => AuthenticationExceptionauthenticationEntryPoint, AccessDeniedException는 accessDeniedHandler 로 위임한다.

  

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기