스프링 시큐리티 인증 구조

스크린샷 2025-11-05 오전 2.12.21.png

단계 주체 동작
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에 저장합니다. 이로써 사용자의 인증 상태가 세션에 유지되며, 이후 요청에서는 로그인 과정 없이 권한 확인(인가)만 거치게 됩니다.

필터 구조 (AuthenitcationFilter)