java/spring

Spring Security 작동 순서

일상코더 2022. 10. 13. 14:17

 

 

1. http로 로그인 요청

 

2. 로그인 인증 요청이라면 UsernamePasswordAuthenticationFilter(이하 AuthencicationFilter)가 요청을 가로채 전달된

username, password 파라미터를 이용해 UsernamePasswordAuthenticationToken 인증 객체를 만든다.

 

3. 인증 객체를 인증하기 위한 AuthenticationManager 에 넘기고 인증을 위임한다.

 

4. AuthenticationManager 를 구현한 ProviderManager는 스프링 시큐리티가 기본적으로 제공하는 AuthenticationProviders에 인증 객체를 전달한다.

 

5. 인증에 사용되기 적합한 AuthenticationProvider 가 존재하면(여기는 DaoAuthenticationProvider) UserDatailsService 에 인증 객체를 전달한다.

 

6. UserDetailsService 에서 인증 객체의 정보를 통해 DB에서 일치하는 사용자 정보를 찾고 UserDetails객체를 만든다.

 

7. AuthenticationProvider는 UserDetails와 UsernamePasswordAuthenticationToken를 비교해 인증에 성공하면 ProviderManager에 권한을 담은 새 UsernamePasswordAuthenticationToken을 만들어 전달한다.

 

8. ProviderManager는 검증된 인증 객체를 AuthenticationFilter에게 전달한다.

 

9. AuthenticationFilter는 검증된 인증 객체를 SecurityContextHolder의 SecurityContext에 저장하고 나머지 SecurityFilterChain은 무시하고 SercurityFilterChain을 종료한다.