목차
Spring Security 권한 계층 사용하기 - @RoleHierarcy
Spring Security - DelegateFilterProxy
Spring Security - Remember Me와 관련된 인증 API - RememberMeConfigurer
Spring Security - RembmerMeAuthenticationFilter
Spring Security - SessionManagementFilter & ConcurrentSessionFilter
Spring Security - 인가 API ExpressionUrlAuthorizationConfigurer
Spring Security - Security 설정을 위한 WebSecurityConfigurerAdatper
Spring Security - AuthenticationProvider
Spring Security - AuthenticationManager
Spring Security - UsernamePasswordAuthenticationFilter & AbstractAuthenticationProcessingFilter
Spring Security - SecurityContextHolder 와 SecurityContext
Spring Security - Authentication 객체
참고
https://spring.io/guides/topicals/spring-security-architecture
AbstractAuthenticationProcessingFilter 인증 과정
AbstractAuthenticationProcessingFilter 는 Spring Security Filter에서 인증 과정을 구현한 추상 Class 다.
로그인을 진행하는 URL로 로그인 요청이 들어왔는지 확인한다.
요청에 대한 인증을 진행하고 Authentication 객체를 반환 받는다.
Session 전략에 따라 적절한 처리를 진행한다. (Session Id 변경)
인증이 완료 됐으면 Authentication 객체를 SecurityContext에 저장한다.
AbstractAuthenticationProcessingFilter.java
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { doFilter((HttpServletRequest)request, (HttpServletResponse)response, chain);}private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { // 로그인을 진행하는 URL로 로그인 요청이 들어왔는지 확인한다. if (!requiresAuthentication(request, response)) { chain.doFilter(request, response); return; } try { // 인증을 진행하고 생성된 Authentication 객체를 반환받는다. // AbstractAuthenticationProcessingFilter 를 상속받은 Class에 의해 구현되는 부분 Authentication authenticationResult = attemptAuthentication(request, response); if (authenticationResult == null) { return; } // Session에 대한 설정을 한다. Session Id를 변경 this.sessionStrategy.onAuthentication(authenticationResult, request, response); // Authentication success if (this.continueChainBeforeSuccessfulAuthentication) { chain.doFilter(request, response); } // 인증 후 처리를 진행한다. successfulAuthentication(request, response, chain, authenticationResult); } catch (InternalAuthenticationServiceException failed) { this.logger.error("An internal error occurred while trying to authenticate the user.", failed); unsuccessfulAuthentication(request, response, failed); } catch (AuthenticationException ex) { // Authentication failed unsuccessfulAuthentication(request, response, ex); }}