✅ 스프링 시큐리티란?
스프링 기반 애플리케이션의 인증과 인가를 담당하는 스프링 하위 프레임워크
🔹 인증 : 로그인, 회원가입
🔹 인가 : 인증된 사용자의 권한에 따라 접근 허락
✅ 스프링 시큐리티 인증 구조
개인 정리
1️⃣ 유저가 로그인을 요청하면 AuthenticationFilter에서 요청을 가로챔
2️⃣ HTTPServletRequest에서 사용자가 보낸 아이디, 비번의 유효성을 검사하고, AuthenticationFilter가 사용자 정보로 임시 인증용 객체(UsernamePasswordAuthentication Token)를 만듦
3️⃣ AuthenticationFilter가 임시 인증용 객체를 AuthenticationManager에 전달
4️⃣ AuthenticationManager가 전달받은 임시 인증용 객체를 AutenticationProvider에 전달해 인증 요구
5️⃣ AuthenticationProvider가 DB에서 사용자 정보와 같은 정보를 가져오게 지시
6️⃣ DB 조회한 결과를 UserDetails(사용자 정보 담은 인터페이스)에 저장
7️⃣ DB 조회 결과가 담긴 UserDetails를 AuthenticationProvider에 전달
8️⃣ 인코더로 UserDetails 객체의 암호화된 비번과 임시 인증용 객체의 비번 비교
⭕ 검증 성공 : 진짜 인증용 객체(Authentication Token) 생성
❌ 검증 실패 : 예외 발생, 인증 중단
💡 Authentication Token에 담긴 정보
🔹 Principal : 사용자 아이디
🔹 Credentials : 사용자 비밀번호
🔹 Authorities : 인증된 사용자의 권한 목록
🔹 Authenticated : boolean 타입의 인증 여부
9️⃣ AuthenticationManager가 진짜 인증용 객체를 AuthenticationFilter에 전달
🔟 AuthenticationFilter가 진짜 인증용 객체를 SecurityContext에 저장