AnonymousAuthenticationFilter 이란?

 

  • 익명사용자 인증 처리 필터
  • 익명사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용
  • 화면에서 인증 여부를 구현할 때 isAnonymous() 와 isAuthenticated() 로 구분해서 사용
  • 인증객체를 세션에 저장하지 않는다

 

 


 

이미지로 플로우 확인

 

  1. 사용자가 자원에 접근하면  AnonymousAuthenticationFilter가 요청을 받는다.
  2. SecurityContextHolder(이하 SC)에 인증객체가 존재하는지 확인한다.
  3. 인증객체가 있다면 다음필터가 진행
  4. 인증객체가 없다면 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() 로 구분해서 사용한다.

 

 

복사했습니다!