[ODOP] 89일차 - Authentication Manager
![[ODOP] 89일차 - Authentication Manager](/content/images/size/w1200/2023/08/-----2023-08-01----10.29.26-22.png)
- AuthenticationProvider 목록 중에서 인증 처리 요건에 맞는 AuthenticationProvider 를 찾아 인증 처리를 위임한다
- 부모 ProviderManager 를 설정하여 AuthenticationProvider 를 계속 탐색할 수 있다
- 인증 처리에 대한 요청이 Filter 로 부터 오게되면, 해당 인터페이스는 요청에 맞는 ProviderManager 에게 처리를 위임하게 된다.
![](https://blog.pollra.com/content/images/2023/08/-----2023-09-01----4.45.51.png)
요청이 들어왔을 때의 흐름을 보면 다음과 같은 순서로 처리된다.
- Form 인증 방식으로 로그인 요청이 들어온다
- 해당 인증을 처리하기 위한 Filter 는 Authentication 객체를 ProviderManager 에게 넘긴다
- ProviderManager 는 요청에 맞는 DaoAuthenticationProvider 에게 요청을 위임한다
- DaoAuthenticationProvider 는 Filter 에서 만들어진 Authentication 객체를 수신하여 로그인 기능을 수행한다
- 로그인 성공한 Authentication 객체를 Filter 에게 리턴해준다
위에서 알 수 있듯 ProviderManager 는 어떤 인증 처리 요청이 들어왔을 때 그에 맞는 Provider 에게 그 요청을 위임하는 역할만을 수행한다
그러나 위 이미지와 같은 상황이라고 해보자. Oauth 인증에 대한 처리가 ProviderManager 에 바로 있는 것이 아니라 parent 라고 표기 되어있는 ProviderManager 에 있는 경우이다.
이 경우에 ProviderManager 는 parent 에 있는 ProviderManager 까지 탐색하게 된다
아래 코드는 parent 속성에 인증 요청하는 부분을 찍은 이미지 이다
![](https://blog.pollra.com/content/images/2023/08/-----2023-09-01----4.46.22.png)
아래는 실제 클래스의 모습이며 필드에 parent 가 선언되어 있으며 AuthenticationManager 를 가지고 있는 모습을 확인 할 수 있다.
![](https://blog.pollra.com/content/images/2023/08/-----2023-09-01----4.46.47.png)