사용자가 Username(ID)과 Password를 포함한 요청을 Spring Security가 적용된 애플리케이션에 전송. 로그인 요청이 FilterChain 까지 들어 오면 UsernamePasswordAuthenticaiontFilter
가 해당 요청을 전달 받는다.
UsernamePasswordAuthenticaiontFilter
는 Username과 Password를 이용해 UsernamePasswordAuthenticationToken
을 생성한다.
UsernamePasswordAuthenticationToken
Authentication
인터페이스를 구현한 구현 클래스
아직 인증 되지 않은 Authentication
를 AuthenticationManager
를 구현한 클래스인 ProviderManager
에게 전달한다.
AuthenticationProvider
는 인증을 처리하기 위해 ProviderManager
로 부터 Authenticaion
를 전달받고 UserDetailsService
를 이용해 UserDetails
를 조회한다.
UserDetailsService
UserDetails
를 담고있는 컴포넌트
UserDetails
- 사용자의 Username, Password, 권한 정보를 담고있는 컴포넌트
사용자 정보를 기반으로UserDetails
를 생성한 후 AuthenticationProvider
에게 다시 전달 한다.
PasswordEncoder
를 이용해 암호화된 Password와 인증을 위한 Authentication
에 포함된 Password가 일치하는지 검증한다.
Authenticaion
을 생성한다.인증된 Authentication
를 ProviderManager
에게 전달하고, 다시 UsernamePasswordAuthenticationFilter
에게 전달한다.
마지막으로 SecurityContextHolder
를 이용해 SecurityContext
에 인증된 Authentication
를 저장한다.