정수원님의 **스프링 시큐리티 완전 정복** 강의 내용 기록입니다 !!
AbstractAuthenticationProcessingFilter
- 스프링 시큐리티는 AbstractAuthenticationProcessingFilter 클래스를 사용자의 자격 증명을 인증하는 기본 필터로 사용
- 보통 AbstractAuthenticationProcessingFilte 를 상속받은 클래스로 사용
- UsernamePasswordAuthenticationFilter 클래스 또는 직접 정의 클래스
- UsernamePasswordAuthenticationFilter 클래스는 HttpServletRequest에서 제출된 사용자 이름과 비밀번호로부터 인증을 수행
- 인증 프로세스가 초기화 될 때 로그인 페이지와 로그아웃 페이지 생성을 위한 DefaultLoginPageGeneratingFilter 및 DefaultLogoutPageGeneratingFilter가 초기화됨
client
↓ Get /login
↓
AbstractAuthenticationProcessingFilter
↓
UsernamePasswordAuthenticationFilter / CustomAuthenticationFilter (상속받은 사용자 정의 클래스)
- AbstractAuthenticationProcessingFilter를 상속받아 attemptAuthentication() 메소드 구현 !
흐름도
client
↓ Get /login
↓
UsernamePasswordAuthenticationFilter
↓
RequestMatcher : 요청 정보가 매칭 되는지 확인
- 기본적으로 /login으로 지정되어 있음
- RequestMatcher를 통해 요청 URL이 Get /login 이 맞는지 확인
≫ 아니면 인증 프로세스 수행하지 않고 다른 필터로 넘김 → chain.doFilter
↓
UsernamePasswordAuthenticationToken : (Username + Password) 정보를 저장 → 앞으로 인증 수행을 할 수 있도록 사용됨
↓
AuthenticationManager : UsernamePasswordAuthenticationToken을 전달하여 token을 통해 인증 처리를 하도록 함
↓
인증 성공 ?
↓
Yes
↓
UsernamePasswordAuthenticationToken : 새로 생성 (UserDetails + Authorities)
- 인증 성공했기 때문에 사용자의 username, password 뿐만 아니라 여러 사용자 정보를 가지고 있어야 함
- 보통 db에서 정보를 가져와서 객체를 생성하여 저장
- 사용자가 가진 권한도 저장
- 인증에 성공한 최종 인증 객체 !
↓
SessionAuthenticationStrategy : 새로운 로그인을 알리고 세션 관련 작업들을 수행
↓
SecurityContextHolder : Authentication을 SecurityContext에 설정 / 세션에 SecurityContext가 저장됨
- Authentication : 생성했던 최종 인증 객체인 UsernamePasswordAuthenticationToken
- 사용자의 인증 상태를 유지하기 위해서 !
- 중요 ☆
↓
RememberMeServices : RememberMeService.loginSuccess 호출 (Remember-me가 설정된 경우)
- 사용자 정보 기억하기 체크박스에 체크하면 ≫ Remember-me가 설정된 것
- 기억하기 인증이 활성화된 경우에 그에 대한 처리를 하는 클래스
↓
ApplicationEventPublisher : 인증 성공 이벤트를 게시
↓
AuthenticationSuccessHandler : 인증 성공 핸들러 호출 (API로 설정한 핸들러)
No
↓
SecurityContextHolder : SecurityContextHolder가 삭제됨
- 사용자의 인증 상태를 유지하는 기능이므로, 인증 요청에 실패하면 보안을 위해 인증 상태를 삭제
↓
RememberMeService : RememberMeService.loginFail 호출됨
- 자동 로그인 기능, 인증 요청에 실패하면 보안을 위해 자동 로그인 삭제
↓
AuthenticationFailureHandler : 인증 실패 핸들러 호출 (API로 설정한 핸들러)
** 인증 프로세스 도중 실패로 인한 예외가 발생하면
→ AuthenticationFailureHandler에서 모두 처리하도록 함
'spring security' 카테고리의 다른 글
기본 인증 필터 - BasicAuthenticationFilter (0) | 2025.01.27 |
---|---|
기본 인증 - httpBasic() (0) | 2025.01.27 |
폼 인증 - formLogin() (0) | 2025.01.19 |
사용자 정의 보안 설정하기 (0) | 2025.01.17 |
DelegatingFilterProxy / FilterChainProxy (0) | 2025.01.13 |