1. UsernamePasswordAuthenticationFilter
가 UsernamePasswordAuthenticationToken
을 생성 후에 ProviderManager
에 의해 구현이 된 AuthenticationManager
에게 전달한다. 아래 코드는 UsernamePasswordAuthenticationFilter
클래스의 attemptAuthentication(...)
메서드이다. 이 메서드에 의해 UsernamePasswordAuthenticationToken
이 생성되는 것을 알 수 있다.
2. ProviderManager
는 DaoAuthenticationProvider
에 의해 구현된 AuthenticationProvider
를 사용하도록 구성되어 있다.
3. DaoAuthenticationProvider
는 UserDetailsService
에서 UserDetails
를 찾는다.
4. 그런 다음 DaoAuthenticationProvider
는 PasswordEncoder
를 사용하여 이전 단계에서 반환된 UserDetails
의 암호를 확인한다.
5. 인증이 성공하면, 반환된 Authentication
은 UsernamePasswordAuthenticationToken
유형이고 구성된 UserDetailService
에서 반환된UserDetails
인 principal
을 가진다. 결국 반환된 UsernamePasswordAuthenticationToken
은 UsernamePasswordAuthenticationFilter
에 의해 SecurityContextHolder
에 설정된다.