목차
- 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 객체
Filter 란
- 기본적으로 Filter 는 Servlet Filter 를 의미한다.
- Servlet Filter 는 서블릿 스펙에 정의된 기술
- 서블릿 컨테이너에서 생성되고 실행된다.
- Filter 는 Spring 에서 생성한 Bean 을 사용하거나 Spring 기술을 사용할 수 없다.
- Filter 를 사용해 자원에 대한 접근 전/후에 대한 처리를 진행할 수 있다.
DelegatingFilterProxy
Servlet Container 와 Spring Container 사이에 다리 역할을 해 Spring Bean 으로 등록된 Filter 를 찾아 요청을 위임하는 역할을 한다.
- Servlet Container 위에 구현된 Filter
- Servelt Filter 가 요청을 DelegatingFilterProxy 로 전달
- DelegatingFilterProxy 는 들어온 요청을 Spring Container 위에 생성된 Filter Bean 에 요청을 위임
- springSecurityFilterChain 이름으로 생성된 Bean 을 찾아 요청을 위임한다.
FilterChainProxy
- springSeuciryFilterChain 이름으로 생성되는 Filter Bean
- DelegatingFilterProxy 로부터 요청을 위임 받고 실제로 보안 처리를 진행한다.
- Filter 를 관리하고 제어하며 호출 돼 실제로 보안 처리를 진행한다.
- Spirng Security 가 기본적으로 생성하는 Filter
- 설정 클래스(Config) 클래스에서 추가시 생성되는 Filter
- 사용자 요청을 필터 순서대로 호출하여 그 다음 Filter 로 전달한다.
- 마지막 Filter 까지 진행이 되면 Servlet 에 접근할 수 있다.
DelegatingFilterProxy 처리 과정
- 사용자가 요청을 하게 되면 Servlet 에 존재하는 Filter 가 가장 먼저 받게 된다.
- DelegatingFilterProxy 가 사용자 요청을 받게 되면 요청 객체를 FilterChainProxy 에 위임한다.
- FilterChainProxy 는 요청에 대해 Filter 별로 호출을 해 보안 처리를 진행
- 인증/인가가 완료된 후 요청을 DispatcherServlet 에 넘긴다.
SecurityFilterAutoConfiguration
- securityFilterChainRegistration 을 springSecurityFilterChain 이름으로 Spring 에 등록한다.
- DelegatingFilterProxyRegistrationBean 을 생성하게 될 경우 DelegatingFilterProxy 생성자가 실행된다.
DelegatingFilterProxy
- DelegatingFilterProxy 생성자는 요청을 위임할 Bean 이름을 springSecurityFilterChain 를 설정한다.
WebSecurityConfiguration
- springSeuciryFilterChain 이름을 가진 Bean 을 생성한다.
- webSecurity.build 메서드를 실행할 경우 WebSecurity 객체의 performBuild 메서드가 실행된다.
WebSecurity
- FilterChainProxy 객체를 생성한다.
사용자 요청이 들어왔을 때
DelegationFilterProxy
- DelegationFilterProxy 에서 요청을 받고 요청을 위임할 Filter (springSecurityFilterChain) 을 찾아 요청을 위임한다.
FilterChainProxy
getFilters
메서드를 통해 Spring Security 가 초기화 되면서 생성되는 Filter 목록들을 가져와- VirtualFilterChain 객체를 생성해 Filter 를 전달하면 순서대로 Filter 를 실행시킨다.