경주장
[인증 API]익명사용자 인증 필터 : AnoymousAuthenticationFilter 본문
• 익명사용자 인증 처리 필터
• 익명사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용
• 화면에서 인증 여부를 구현할 때 isAnonymous() 와 isAuthenticated() 로 구분해서 사용
• 인증객체를 세션에 저장하지 않는다 -> SecurityContext에 저장한다.
다른 필터에 비해 역할이 꽤 간단하다.
인증된 사용자와 익명 사용자를 조금 더 명확하게 구분하기 위해 익명사용자라 할지라도 인증객체를 null이아닌 익명사용자용 인증객체를 설정하는 역할을 한다.
AnoymousAuthenticationFilter의 doFilter
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
if (SecurityContextHolder에 Authencation 객체가 null 이라면) {
Authentication authentication = createAuthentication((HttpServletRequest)req); //요청을 통해 인증객체를 생성하고
SecurityContext context = SecurityContextHolder.createEmptyContext();
context.setAuthentication(authentication);
SecurityContextHolder.setContext(context); //이를 SecurityContext 및 SecurityContextHolder에 설정한다.
}
chain.doFilter(req, res);
}
생성된 익명사용자용 인증 객체
AnoymousAuthenticationFilter에서 익명사용자용 인증 객체를 설정하기때문에
예외 처리를 진행하는 마지막 필터인 AbstractSecurityInterceptor에서는 인증객체가 비어있다면 credentialsNotFound 예외가 발생하는 구문이 있습니다.
if (SecurityContextHolder.getContext().getAuthentication() == null) {
this.credentialsNotFound(this.messages.getMessage("AbstractSecurityInterceptor.authenticationNotFound", "An Authentication object was not found in the SecurityContext"), object, attributes);
}
AbstractSecurityInterceptor.InterceptorStatusToken( )
'스프링 > 스프링 시큐리티' 카테고리의 다른 글
[인증 API] 세션 고정보호, 세션 생성 정책 (0) | 2022.02.06 |
---|---|
[인증 API] 동시 세션제어 (0) | 2022.02.06 |
[인증 API] Remember Me 인증 (0) | 2022.02.02 |
[인증 API]로그아웃과 LogoutFilter (0) | 2022.02.02 |
[인증API] Form Login 인증 필터: UsernamePasswordAuthenticationFilter (0) | 2022.02.02 |