AuthenticationManager가 인증을 마친 뒤 리턴 받은 Authentication 객체는?
SecurityContextPersistenceFilter -> CsrfFilter -> LogoutFilter -> AbstractAuthenticationProcessingFilter-> UsernamePasswordAuthenticationFilter
SecurityContextPersistenceFilter
- SecurityContext를 HTTP session에서 캐시(기본 전략)하여 여러 요청에서 Authentication을 공유하는 필터
- SecurityContextRepository를 교체하여 세션을 HTTP session이 아닌 다른 곳에 저장하는 것도 가능
UsernamePasswordAuthenticationFilter
- 폼 인증을 처리하는 필터
AbstractAuthenticationProcessingFilter
- 인증 프로세스를 위한 Abstract 클래스
- 해당 클래스를 상속받은 클래스에 구현된 attemptAuthentication 메서드를 이용하여 인증을 처리함
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain,
Authentication authResult) throws IOException, ServletException {
SecurityContext context = SecurityContextHolder.createEmptyContext();
context.setAuthentication(authResult);
SecurityContextHolder.setContext(context);
if (this.logger.isDebugEnabled()) {
this.logger.debug(LogMessage.format("Set SecurityContextHolder to %s", authResult));
}
this.rememberMeServices.loginSuccess(request, response, authResult);
if (this.eventPublisher != null) {
this.eventPublisher.publishEvent(new InteractiveAuthenticationSuccessEvent(authResult, this.getClass()));
}
this.successHandler.onAuthenticationSuccess(request, response, authResult);
}
인증이 완료되면 해당 메서드에서 SecurityContextHolder에 인증정보를 set함
'스터디-Spring' 카테고리의 다른 글
[스프링 시큐리티] DelegatingFilterProxy와 FilterChainProxy (0) | 2022.01.13 |
---|---|
[스프링 시큐리티] Filter와 FilterChainProxy (0) | 2022.01.12 |
[스프링 시큐리티] ThreadLocal (0) | 2022.01.10 |
[스프링 시큐리티] AuthenticationManager와 Authentication (0) | 2022.01.10 |
[스프링 시큐리티] SecurityContextHolder와 Authentication (0) | 2022.01.10 |