인증 매커니즘을 간단하게 만들 수 있도록 다양한 옵션들을 제공한다. 웹 요청이나 메소드 호출, 도메인 인스턴스에 대한 접근 등 상당히 깊은 수준의 권한 부여를 제공
사용자가 로그인 정보와 함께 인증 요청(Http Request)
AuthenticationFilter가 이 요청을 가로챕니다. 이 때 가로챈 정보를 통해 UsernamePasswordAuthenticationToken이라는 인증용 객체를 생성합니다.
AuthenticationManager의 구현체인 ProviderManager에게 UsernamePasswordAuthenticationToken 객체를 전달합니다.
다시 AuthenticationProvider에 UsernamePasswordAuthenticationToken 객체를 전달합니다.
실제 데이터베이스에서 사용자 인증정보를 가져오는 UserDetailsService에 사용자 정보(아이디)를 넘겨줍니다.
넘겨받은 사용자 정보를 통해 DB에서 찾은 사용자 정보인 UserDetails 객체를 만듭니다. 이 때 UserDetails 는 인증용 객체와 도메인용 객체를 분리하지 않고 인증용 객체에 상속해서 사용하기도 합니다.
AuthenticationProvider는 UserDetails를 넘겨받고 사용자 정보를 비교합니다.
인증이 완료되면 권한 등의 사용자 정보를 담은 Authentication 객체를 반환합니다.
다시 최초의 AuthenticationFilter에 Authentication 객체가 반환됩니다.
Authentication 객체를 SecurityContext에 저장합니다.
JSON 객체를 통해 안전하게 정보를 전송할 수 있는 웹표준(RFC7519)