- Spring Security 초기화 - DelegatingFilterProxy, FilterChainProxy, SecurityFilterChain, WebSecurity2025년 01월 28일
- starryeye
- 작성자
- 2025.01.28.오후09:13
지난 포스팅에서
HttpSecurity(SecurityBuilder) 로 SecurityConfigurer 를 이용하여
다양한 Servlet Filter 를 포함하는 SecurityFilterChain 을 생성하는 과정을 알아보았다.
이번엔..
SecurityBuilder 의 또다른 구현체인 WebSecurity 에 대해 알아보겠다.
WebSecurity
위 코드는 WebSecurityConfiguration 클래스 중 일부이다.
this.securityFilterChains, this.httpSecurity 필드는
WebSecurityConfiguration 객체에서 의존성 주입을 받은 것이다.
따라서, WebSecurity 는 이전 포스팅에서 봤던 SecurityFilterChain, HttpSecurity 를 이용하여 빌드한다는 것을 알 수 있다.
WebSecurity 는 내부에 SecurityFilterChain 을 담는 객체이고
WebSecurity 의 build 메서드를 호출하여 WebSecurity::performBuild 를 수행함으로써 최종적으로
springSecurityFilterChain 이름을 가진 FilterChainProxy 타입의 Servlet Filter 를 빈으로 등록한다.
아래는 WebSecurity 의 perfomBuild 메서드 코드의 일부이다.
코드를 보면, FilterChainProxy 에 SecurityFilteChain 을 넣고 생성을 하며
최종적으로 리턴하는 것을 볼 수 있다.
그러나.. FilterChainProxy 는 Servlet Filter 를 상속한 객체이기는 하나
실제 런타임에 Servlet Filter 로써 등록이 되어야 작동을 할 것이다..
위 코드는 SecurityFilterAutoConfiguration 클래스에서
DelegatingFilterProxyRegistrationBean 타입의 빈을 등록하는 코드이다.
파라미터로 springSecurityFilterChain 을 넣어주고 있는 것을 볼 수 있으며,
이는 스프링 컨테이너를 이용하여 springSecurityFilterChain 이름을 가진 FilterChainProxy 객체에 접근할 것임을
간접적으로 알 수 있다.
DelegatingFilterProxy
DelegatingFilterProxy 는..
실제 서블릿 컨테이너에 등록되는 Servlet Filter 이며
springSecurityFilterChain 이름을 가진 FilterChainProxy 객체에 Client 요청을 위임한다.
위 캡쳐는 DelegatingFilterProxy 가 Servlet Filter 로써 doFilter 로직에서 요청을 위임하는 것을 볼 수 있다.
요청 관점 정리
Client 의 요청이 Server 로 들어오면..
1. Servlet Container 에 관리되는 Servlet Filter 인 DelegatingFilterProxy 가 요청을 받는다.
2. DelegatingFilterProxy 는 Spring Container 에 관리되고 springSecurityFilterChain 이름을 가진 FilterChainProxy 에 요청을 위임한다.
3. FilterChainProxy 에는 내부에 SecurityFilterChain 이 존재하며..
SecurityFilterChain 내부에는 수많은 인증, 인가 기능에 관련된 Filter 들이 존재한다.
4. 해당 filter 들을 순차적으로 filter 로직을 수행한다.
생성 초기화 관점 정리
spring security 의존성을 프로젝트에 설정하면..
1. auto configuration 에 의해 HttpSecurity(SecurityBuilder 구현체) 이 기본적으로 빈으로 등록된다.
2. 개발자는 HttpSecurity 를 주입 받아서 HttpSecurity 에 다양한 인증, 인가 관련 SecurityConfigurer 를 설정 후,
build 하면 SecurityFilterChain 이 빈으로 등록된다.
3. WebSecurity(SecurityBuilder 구현체) 는 auto configuration 로직에 의해 생성되고 빌드된다.
생성될 때, 이미 만들어 놓은 HttpSecurity, SecurityFilterChain 을 가지고
springSecurityFilterChain 이름을 가진 FilterChainProxy 를 만들고 빈으로 등록한다.
4. FilterChainProxy 는 Servlet Filter 인 DelegatingFilterProxy 에 의해 호출 되도록 구성된다.
'Spring > Security' 카테고리의 다른 글
Spring Security 초기화 - HttpSecurity, SecurityConfigurer, SecurityFilterChain (0) 2025.01.28 Spring Security 초기화 - 의존성에 의한 자동 구성 (0) 2025.01.28 Spring Security 소개 (0) 2025.01.28 다음글이전글이전 글이 없습니다.댓글