Published 2023. 4. 15. 11:13
AnonymousAuthenticationFilter 이란?
- 익명사용자 인증 처리 필터
- 익명사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용
- 화면에서 인증 여부를 구현할 때 isAnonymous() 와 isAuthenticated() 로 구분해서 사용
- 인증객체를 세션에 저장하지 않는다
이미지로 플로우 확인
- 사용자가 자원에 접근하면 AnonymousAuthenticationFilter가 요청을 받는다.
- SecurityContextHolder(이하 SC)에 인증객체가 존재하는지 확인한다.
- 인증객체가 있다면 다음필터가 진행
- 인증객체가 없다면 AnonymousAuthenticationToken(익명사용자 토큰)을 생성해 SC에 저장 한다. (사용인증객체를 세션에 저장하지 않는다)
SC에 저장한 AnonymousAuthenticationToken은 익명사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용하고 인증 여부를 구현할 때 isAnonymous() 와 isAuthenticated() 로 구분해서 사용한다.
코드로 플로우 확인
자원에 접근하면 AnonymousAuthenticationFilter.class의 doFilter()를 보면 (1)에 서 SC에 인증객체가 있으면 (3)으로 로그만 남기는 것을 확인 할 수 있다.
위 이미지 (2)의 createAuthentication() 를 호출해서 AnonymousAuthenticationToken 객체를 생성해 셋팅하는 것을 확인할 수 있다.
이유
왜 시큐리티는 SC에 Null 대신해서 익명사용자토큰을 저장하는지는 AbstractSecurityInterceptor.class의 beforeInvocation() 에서 확인해 보면, (1) 에서 SC에 인증객체가 null이면 Exception을 던지도록 되어 있기 때문이다.
그 이후에는 isAnonymous() 와 isAuthenticated() 로 구분해서 사용한다.