| 1 |
HttpServletRequest |
사용자가 아이디와 비밀번호를 입력하고 로그인 버튼을 눌러 인증을 위한 HTTP 요청을 보냅니다. |
| 2 |
AuthenticationFilter |
요청이 들어오면, 필터(주로 UsernamePasswordAuthenticationFilter)는 |
요청 본문에서 아이디와 비밀번호를 추출하여 인증 전 토큰인 UsernamePasswordAuthenticationToken 객체를 생성합니다. |
|
|
| 3 |
AuthenticationFilter |
생성한 인증 토큰을 인증의 핵심 관리자인 AuthenticationManager 인터페이스로 전달합니다. |
| 4 |
AuthenticationManager |
전달받은 토큰을 처리할 수 있는 AuthenticationProvider를 찾아서 토큰을 전달하며, 실제 인증 작업을 위임합니다. |
| 5 |
AuthenticationProvider |
토큰에서 사용자 아이디를 꺼내, UserDetailsService에게 해당 아이디를 가진 사용자 정보를 조회하도록 요청합니다. |
| 6 |
UserDetailsService |
데이터베이스 등에서 아이디에 해당하는 사용자 정보를 찾은 후, UserDetails 객체를 생성하여 반환합니다. (이 객체에는 아이디, 암호화된 비밀번호, 권한 등이 포함됩니다.) |
| 7 |
AuthenticationProvider |
UserDetailsService로부터 UserDetails 객체를 받습니다. |
| 유효성 검사 |
AuthenticationProvider |
1. 사용자 존재 여부 (UserDetails가 정상적으로 로드되었는지) |
2. 비밀번호 일치 여부 (토큰의 입력 비밀번호와 UserDetails의 암호화된 비밀번호를 비교)를 확인 |
|
|
| 8 |
AuthenticationProvider |
(인증 성공 시) UserDetails 정보를 포함하여 완전히 인증된(Authenticated) Authentication 객체(토큰)를 AuthenticationManager를 거쳐 AuthenticationFilter로 반환합니다. |
| 9 |
AuthenticationFilter |
AuthenticationManager로부터 인증 성공 토큰을 최종적으로 전달받습니다. |
| 10 |
AuthenticationFilter |
최종 인증된 토큰을 SecurityContextHolder 내의 SecurityContext에 저장합니다. 이로써 사용자의 인증 상태가 세션에 유지되며, 이후 요청에서는 로그인 과정 없이 권한 확인(인가)만 거치게 됩니다. |