스프링 프레임워크에서 로그인을 한다는 것은 authenticated 가 true
인 Authentication 객체
를 SecurityContext
가 갖고 있는 상태
Authentication이 AnonymousAuthenticationToken 만 아니면 됨
로그인 == Authentication(authenticated = true) only if Authentication != AnonymousAuthenticationToken
SecurityContextHolder
는 인증을 보관하는 보관소이며 Authentication을 갖고 있는 SecurityContext를 보관
AuthenticationProvider
은 Authentication을 제공하며 이는 여러개가 존재할 수 있음(ProviderManager 도 복수로 존재 가능)
AuthenticationProvider를 관리하는 Interface를 AuthenticationManager
라고 하며 ProviderManager는 AuthenticationManager를 구현
Authentication은 권한의 정보와 인증 대상에 대한 Principal(접근 주체)
, Credential(비밀번호)
의 정보를 갖는 인터페이스이다.
UsernamePasswordAuthenticationFilter
: 폼 로그인을 처리해준다.OAuth2LoginAuthenticationFilter
: 소셜 로그인을 처리해준다.RememberMeAuthenticationFilter
: remember-me 쿠키 로그인을 처리해준다.AnonymousAuthenticationFilter
: 로그인하지 않았다는 것을 인증해준다.SecurityContextPersistenceFilter
: 기존 로그인을 유지해준다. (기본적으로 session 을 이용함)BearerTokenAuthenticationFilter
: JWT 로그인을 처리해준다.BasicAuthenticationFilter
: ajax 로그인 (Session이 있는 경우에 사용)OpenIDAuthenticationFilter
: OpenID 로그인을 처리해준다.Set < GrantedAuthority > authorities
: 인증된 권한 정보 목록principal
: 인증 대상에 관한 정보로 사용자의 아이디 혹은 User객체가 저장된다.credentials
: 인증 확인을 위한 정보로 주로 비밀번호가 온다. (※ 인증 후에는 보안을 위해 삭제한다.)details
: 그 밖에 필요한 정보로 IP, 세션정보, 기타 인증요청에서 사용했던 정보들이 들어감(User Details 와 dif)boolean authenticated
: 인증이 되었는지를 체크한다.