스프링 시큐리티

Authentication 흐름 2(AnonymousAuthenticationFilter)

쥐4 2024. 8. 6. 00:50

->FilterChainProxy의 VirtualFilterchain는 doFilter()를 통해 책임 연쇄 패턴 즉, 설정된 필터들을 doFilter()한다.

->이때, 우리는 몇개의 Filter의 동작을 볼 필요가 있다.

1. AnonymousAuthenticationFilter(익명 인증 필터)

 

//첫번째 코드===============================================

->VirtualFilterChain 클래스의 doFilter() 시 맨 위의 doFilter()가 실행된다.

->아예 쌩 첫 요청이라 가정(localhost:8080)

->현재 Session이나 뭐, DB등 어떠한 저장소에도 SecurityContext가 없다.

->getDeferredContext()로 deferredContext에는 SupplierDeferredSecurityContext 객체가 들어옴

**후에 SupplierDeferredSecurityContext.get()으로 SecurityContext 지연로딩(아무런 context도 없으니 get() 메소드는 비어있는 객체를 새로 만든다.)

->setDeferredContext로 &어떠한 supplier를 SecurityContextHolder(스레드 로컬이라 한 요청에서 어디든지 securityContext를 빼올 수 있는 객체)에 저장

->&어떠한 supplier는 2번째 코드

//두번째 코드==============================================

->비어있는 Context를 반환하는 supplier.get()해서 비어있는 컨택스트를 currentContext로

->이 객체는 defaultWithAnonymous() 메소드로 개조가 되는데!!!??!!

//세번째 코드==============================================

->currentContext에서 (비어있는 Context) getAuthentication해서 null을 받아준다.

->쭉 훑어보면, 뭐, createAuthentication으로 AnonymousFilter의 인증 객체를 만들어

->새로운 비어있는 컨텍스트에 담아 return

------>주루룩 올라가서 securityContextHolderStrategy.set어쩌구()만 해주고 doFilter()

->다시 VirtualFilterChain의 doFilter() 실행==>책임 연쇄 패턴...