

Spring Security란? Spring의 보안, 인증, 권한관리 프레임워크
왜 쓰는지? Spring의 loC/DI 패턴을 염두하고 인증/인가 기능을 제공하기 때문에 효율적이고 편리하게 구현할 수 있게 해준다.
어디에 쓰이는지? 회원가입, 로그인, 세션관리, 권한관리 등에 쓰인다
결론적으로 사용자 정보를 어디서 가져올건지, 어떤식으로 암호화를 할건지에 대한 대답을 @Bean에 만들어둔다면 알아서 Spring Security가 알아서 해줌

사용자의 요청이 들어온다.
AuthenticationFilter가 요청을 가로채고 AuthenticationManager에게 요청을 위임한다.
AuthenticationManager은 등록된 Authentication Provider을 조회하며 인증을 요구한다.
Authentication Provider가 실제 데이터를 조회하여 UserDetail의 결과를 돌려준다.
결과는 SecurityContextHolder에 저장이 되어 저장된 유저정보를 Spring Controller에서 사용한다.

1. 사용자가 로그인 시도(Http POST요청)
2. AbstractAuthenticationProcessingFilter에서 요청을 가로챔
3. 필터는 가로챈 요청에서 아이디와 비밀번호를 꺼낸 후 Authentication 객체 생성
4. Authentication 객체가 AuthenticationManager에게 전달
5. AuthenticationManager은 인증을 요구한다.
6. 인증 요구 실패/성공