Spring Security
스프링 시큐리티는 인증(Authenticate) 와 인가(Authorize) 과정을 쉽게 도와 주기 위한 라이브러리.
이 스프링 시큐리티는 필터 기반으로 동작하는데,
필터는 스프링의 디스패처에 오기 전 WAS에서 관리하는 ‘서블릿 필터’에서 동작하기 때문에,
스프링은 서블릿 필터들을 관리하기 위해서 ‘DelegatingFilterProxy’를 web.xml에 설정하여 스프링에서 설정한 서블릿 필터가 동작하도록 함.
해당 필터는 커스텀으로 만들 수도 있고, 이미 선언되어있는 기본적인 필터들을이용할 수도 있음.

해당 필터는 체이닝 방식으로 이루어짐
request context가 path matcher가 되는 필터가 있다면, 필터가 동작해서 인증을 수행하는 방식
주요 컴포넌트
- AuthenticationWebFilter
웹 필터는 매칭되는 URI에 따라서 인증 과정을 수행하기 위한 기능을 제공.
커스텀하게 만들어서 필터 체인에 추가 가능 - SecurityContextHolder
현재 어플리케이션에 접근하는 인증의 주체(Principal)의 정보를 저장하는 것
기본적으로 ThreadLocal에 주체 정보를 저장해서 같은 스레드의 실행흐름 안에서는 항상 Security context에 접근하는게 가능
그래서 요청 context가 어떤 주체가 요청했는지 알 수 있음. - ReactiveSecurityContextHolder
SecurityContext를 얻거나 셋팅을 할 수 있게 도와줌.
.getContext를 통해 인증의 주체(Principal) 정보에 접근 가능 - ReactiveAuthenticationManager
스프링 시큐리티의 핵심 컴포넌트 중 하나
I/F인데 인증을 하는 함수인 authenticate함수를 갖고 있음
authenticate 함수는 필터를 통해 넘어온 Authenticate 객체가 존재한다면 성공적으로 넘어왔다면,
onAuthenticationSuccess를 이용하여 성공한 인증에 대한 처리 로직을 실행하고,
실패한다면 authenticationFailureHandler을 이용해서 실패에 대한 로직을 처리
[ServerWebExchange]
Contract for an HTTP request-response interaction. Provides access to the HTTP request and response and also exposes additional server-side processing related properties and features such as request attributes.
요청과 응답에 대한 context
[WebFilterChain]
Contract to allow a WebFilter to delegate to the next in the chain.
필터들의 체인으로, WebFilter가 다음 WebFilter로 전파될 수 있도록 도와줌.
출처 : https://www.dazhuanlan.com/2020/04/19/5e9c164d9fd66/