<Spring Security> 5. FilterChainProxy에 들어가는 Filter들 분석하기
by BFine
가. WebAsyncManagerIntegrationFilter
a. 비동기 처리할때 SecurityContext
- WebAsyncManager는 request에 대한 비동기 Thread들을 중앙 관리하는 역할을 한다.
- WebAsyncManagerIntegrationFilter는 SecurityContext를 WebAsyncManager와 통합한다.
- 즉 비동기 처리시 파생되는 Thread들에서도 SecurityContext에 접근할 수 있도록 해준다.
=> ThreadLocal의 SecurityContext를 통합관리
나. SecurityContextPersistenceFilter
a. Context연결하기
- SecurityContextHolder는 주어진 SecurityContext를 현재 Thread에 연결시키는 역할을 한다.
- SecurityContextPersistenceFilter는 SecurityContextHodler에 SecurityContext를 제공한다.
=> 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으로 분류하는 것을 볼 수 있다.
=> AuthenticationException은 authenticationEntryPoint, AccessDeniedException는 accessDeniedHandler 로 위임한다.
'공부 > Spring Security' 카테고리의 다른 글
<Spring Security> 7. HttpSecurity 메서드 분석하기 (0) | 2021.11.14 |
---|---|
<Spring Security> 6. Filter 추가 되는 과정 살펴보기 (0) | 2021.11.03 |
<Spring Security> 4. Custom 필터 추가해보기 (0) | 2021.10.11 |
<Spring Security> 3. 인증&인가 처리 과정 (0) | 2021.09.05 |
<Spring Security> 2. 아키텍쳐 (0) | 2021.09.04 |
블로그의 정보
57개월 BackEnd
BFine