[ODOP] 89일차 - Authentication Manager

[ODOP] 89일차 - Authentication Manager
  • AuthenticationProvider 목록 중에서 인증 처리 요건에 맞는 AuthenticationProvider 를 찾아 인증 처리를 위임한다
  • 부모 ProviderManager 를 설정하여 AuthenticationProvider 를 계속 탐색할 수 있다
  • 인증 처리에 대한 요청이 Filter 로 부터 오게되면, 해당 인터페이스는 요청에 맞는 ProviderManager 에게 처리를 위임하게 된다.
ProviderManager 를 호출하는 흐름이 정리된 표 이다. 출처는 https://www.inflearn.com/course/코어-스프링-시큐리티/lecture/31716?tab=note&speed=1.5

요청이 들어왔을 때의 흐름을 보면 다음과 같은 순서로 처리된다.

  1. Form 인증 방식으로 로그인 요청이 들어온다
  2. 해당 인증을 처리하기 위한 Filter 는 Authentication 객체를 ProviderManager 에게 넘긴다
  3. ProviderManager 는 요청에 맞는 DaoAuthenticationProvider 에게 요청을 위임한다
  4. DaoAuthenticationProvider 는 Filter 에서 만들어진 Authentication 객체를 수신하여 로그인 기능을 수행한다
  5. 로그인 성공한 Authentication 객체를 Filter 에게 리턴해준다

위에서 알 수 있듯 ProviderManager 는 어떤 인증 처리 요청이 들어왔을 때 그에 맞는 Provider 에게 그 요청을 위임하는 역할만을 수행한다

그러나 위 이미지와 같은 상황이라고 해보자. Oauth 인증에 대한 처리가 ProviderManager 에 바로 있는 것이 아니라 parent 라고 표기 되어있는 ProviderManager 에 있는 경우이다.

이 경우에 ProviderManager 는 parent 에 있는 ProviderManager 까지 탐색하게 된다

아래 코드는 parent 속성에 인증 요청하는 부분을 찍은 이미지 이다

아래는 실제 클래스의 모습이며 필드에 parent 가 선언되어 있으며 AuthenticationManager 를 가지고 있는 모습을 확인 할 수 있다.