ProviderManager 는 AuthenticationManager 의 구현객체이다.
동작 구조
-
인증을 요구하는 Filter( UsernamePasswordAuthenticationFilter, RemeberMeAuthenticationFilter...) 에서 인증 요청을 받게되면 AuthenticationProvider의 구현체인 ProviderManager가 작동
-
ProviderManager 는 해당 인증방식 (Form Login, Remember Me , Oauth..) 에 따라서 자신이 가지고 있는 AuthenticationProvider 중 알맞은 AuthenticationProvider 를 찾는다. (DaoAuthenticationProvider , RememberMeAuthenticationProvider..)
-
만약. ProviderManager 가 가지고있는 AuthenticationProvider 명단에 알맞는 AuthenticationProvider 가 존재하지 않는다면, ProviderManager 에 있는 parent 속성 값(AuthenticationManager 타입)에서 부모 타입의 ProviderManager 를 찾는다.
-
ProviderManager에 있는 parent 속성 값에서 부모타입의 ProviderManager 에서 가지고 있는 AuthenticationProvider 명단에서 Filter에서 요구한 인증방식과 알맞은 AuthenticationProvider 를 탐색한다.
-
부모타입의 ProviderManager 에서 알맞은 AuthenticationProvider 가 존재하여 인증작업까지 완료되었다면 ProviderManager 는 AuthenticationProvider 가 리턴한 AuthenticationToken을 받아 해당 Filter에 리턴한다.
-
이와는 다르게, ProviderMananger의 AuthenticationProvider 명단에 알맞는 AuthenticationProvider 가 존재한다면 해당 AuthenticationProvider로 실질적인 인증 작업을 실시한다.
-
인증이 성공했다면 ProviderManager는 AuthenticationProvider에게 리턴받은 AuthenticationToken을 다시 해당 Filter에게 리턴한다.
추가적 학습정보
**ProviderManager 는 SpringSecurity 초기화당시 여러개의 AuthenticationProvider타입의 객체들을 전달받는다.
또한 ProviderManager 의 parent 속성에 부모 격의 ProviderManager 타입 객체 또한 전달 받는다.
**AuthenticationManagerBuilder 는 SpringSecurity 초기화 과정에서 사용할 AuthenticationManager를 추가할 수 있도록 API를 제공하고 있다.
'springframework > 시작하자SpringSecurity' 카테고리의 다른 글
22.Authorization, FilterSecurityInterceptor (0) | 2020.09.22 |
---|---|
21.AuthenticationProvider (0) | 2020.09.22 |
19.Authentication Flow (0) | 2020.09.22 |
18.인증 저장소 필터 , SecurityContextPersistenceFilter (0) | 2020.09.22 |
17.SecurityContextHolder, SecurityContext (0) | 2020.09.22 |