8.AnonymousAuthenticationFilter
AnonymousAuthenticationFilter..?
익명사용자와 인증사용자와의 구분을 위해 만들어진 필터이다.
-
Authentication 객체를 Session에 저장하지 않는다.
-
화면에 메뉴여부를 판단할때 isAnonymous() , isAuthenticated() 등으로 줄 수 있다.
처리 과정.
-
자원 접근에 대한 Request
-
AnonymousAuthticationFilter 에서 Session의 SecurityContextHolder 의 SecurityContext에 Authentication 객체가 있는지 확인
-
있다면 chain.doFilter()
-
없다면 AnonymousAuthenticationToken 객체를 만들어서 AnonymousUser 객체, ROLE_ANONYMOUS 권한을 저장
-
AnonymousAuthenticatonToken을 SecurityContextHolder 의 SecurityContext에 저장.
사용 이유는 .
AbstactSecurityIntercepter 는 마지막에 위치한 필터로, 현재 사용자가 접근하려는 자원에 최종적으로 접근가능한지의 인가처리 여부를 정하는 필터이다.
이과정에서 Authentication이 null이라면 AuthenticationcredentialsNotFoundException을 발생한다.
이 예외를 피하고, 익명사용자와 인증 사용자를 구분하게 하기위해 존재하는 것이다.
즉, AbstactSecurityIntercepter 처리 과정에서 AnonymousAuthenticationToken 이 존재한다면, AuthenticationcredentialNotFoundException은 발생하지 않는다.