"익명으로 인증된" 사용자 = 인증되지 않은 사용자
스프링 시큐리티에서는 인증받지 않은 사용자를 익명으로 인증됐다고 표현하며
SecurityContextHolder가 항상 Authentication 객체를 포함하여 null을 포함하지 않는다는 것을 규칙으로 세우게 되면 클래스를 더 견고하게 작성할 수 있다.
인증된 사용자든 인증받지 않는 사용자든 클래스 즉, 객체로 구분한다는 것
: 보통 기본 설정을 바꾸지 않아도 되지만, 몇가지 기능을 살펴보면
📌 처음 client -> server로 전송될 때, SecurityContextHolder의 Authentication 객체는 null 상태이다 (최초 기본).
null인 상태에서 AnonymousAuthenticationFilter를 만났을 때 해당 익명 사용자 토큰을 생성하고 null로 두지않고 익명사용자 토큰을 저장한다.
해당 filter에서 token을 만들어서 securityContextHolder에 저장하고 anonymousUser 객체를 principal에 저장한다
이처럼 객체화하여 편리하게 사용하기 위함
: 메서드에서 Authentication 객체를 매게변수로 받을 경우, 인증되지 않은 객체가 들어올 경우 AnonymousAuthenticationToken으로 들어오는 것이 아니라 null로 들어오게된다.
익명 객체도 securityContext에 저장되기 때문에 getName()을 통해서 사용한다.
logout은 기본적으로 POST 방식으로 가능하나 두가지 경우에는 다른 방법으로 가능.
로그인 기능을 커스텀하게 생성할 경우 로그아웃 기능도 커스텀 하게 구현해야한다.
FilterChainProxy 를 꺼내놓고 필터를 확인하면서 하면 좋지만 보통 proxy 클래스를 보면서 해당되는 필터들을 확인한다