springframework/시작하자SpringSecurity

20.AuthenticationMananger를 구현한 ProviderManager

Jungsoomin :) 2020. 9. 22. 19:06

ProviderManager 는 AuthenticationManager 의 구현객체이다.

 

동작 구조

  1. 인증을 요구하는 Filter( UsernamePasswordAuthenticationFilter, RemeberMeAuthenticationFilter...) 에서 인증 요청을 받게되면 AuthenticationProvider의 구현체ProviderManager가 작동

  2. ProviderManager 는 해당 인증방식 (Form Login, Remember Me , Oauth..) 에 따라서 자신이 가지고 있는 AuthenticationProvider 중 알맞은 AuthenticationProvider 를 찾는다. (DaoAuthenticationProvider , RememberMeAuthenticationProvider..)

  3. 만약. ProviderManager 가 가지고있는 AuthenticationProvider 명단에 알맞는 AuthenticationProvider 가 존재하지 않는다면, ProviderManager 에 있는 parent 속성 값(AuthenticationManager 타입)에서 부모 타입의 ProviderManager 를 찾는다. 

  4. ProviderManager에 있는 parent 속성 값에서 부모타입의 ProviderManager 에서 가지고 있는 AuthenticationProvider 명단에서 Filter에서 요구한 인증방식과 알맞은 AuthenticationProvider 를 탐색한다.

  5. 부모타입의 ProviderManager 에서 알맞은 AuthenticationProvider 가 존재하여 인증작업까지 완료되었다면 ProviderManager AuthenticationProvider 가 리턴한 AuthenticationToken을 받아 해당 Filter에 리턴한다.

  6. 이와는 다르게, ProviderManangerAuthenticationProvider 명단에 알맞는 AuthenticationProvider 가 존재한다면 해당 AuthenticationProvider로 실질적인 인증 작업을 실시한다.

  7. 인증이 성공했다면 ProviderManagerAuthenticationProvider에게 리턴받은 AuthenticationToken을 다시 해당 Filter에게 리턴한다.


추가적 학습정보

 

**ProviderManager SpringSecurity 초기화당시 여러개의 AuthenticationProvider타입의 객체들을 전달받는다.

또한 ProviderManager parent 속성부모 격ProviderManager 타입 객체 또한 전달 받는다.

 

**AuthenticationManagerBuilder SpringSecurity 초기화 과정에서 사용할 AuthenticationManager추가할 수 있도록 API를 제공하고 있다.