스프링의 인증 처리는 세션과 별도로 동작하도록 설계되어 있다.
→ Session을 사용하건 사용하지 않건 Authentication과 AuthenticationProvider를 사용할 수 있음

통행증과 같은 Authentication을 발급해주면 시큐리티홀더에 넣고 통행증을 들고 다니며 Controller와 Service 계층을 이동하며 인증을 할 수 있다.
→ 발급된 통행증을 가지고 여러 필터를 거치며 인증처리를 함

SecurityContext라는 녀석을 영속화 하는 책임을 가진 필터
SecurityContextRepository에 저장된 SecurityContext 를 Request의 LocalThread에 넣어주었다가 뺏는 역할을 한다.
영속화는 SecurityContextRepository 에서 이뤄지며 별도의 설정이 없으면 Default로 HttpSessionSecurityContextRepository 이 사용되며 HttpSession 의 Attribute에 SecurityContext라는 녀석이 저장

인증 정보를 세션 관리하는 경우, 세션 timeout이 발생하게 도면, remember-me 쿠키를 이용해 로그인을 기억했다 자동으로 재로그인 시켜주는 기능
로그인 하지 않은 사용자 혹은 로그인이 검증되지 않은 사용자는 기본적으로 AnonymousAuthenticationToken 을 발급
익명사용자의 권한을 별도로 설정할 수 있고, 익명사용자에게 주는 principal 객체도 설계해서 대체해 줄 수 있다.