본문 바로가기

spring security

DelegatingFilterProxy / FilterChainProxy

정수원님의 **스프링 시큐리티 완전 정복** 강의 내용 기록입니다 !!

 

 

 

Filter
  • 서블릿 필터 : 웹 애플리케이션에서 클라이언트의 요청(HttpServletRequest)과 서버의 응답(HttpServletResponse)을 가공하거나 검사하는데 사용되는 구성 요소
  • 클라이언트의 요청이 서블릿에 도달하기 전이나 서블릿이 응답을 클라이언트에 보내기 전에 ! 특정 작업을 수행할 수 있음
  • 서블릿 필터는 서블릿 컨테이너(WAS)에서 생성되고, 실행되고, 종료됨

 

Client ≫ 요청 (HttpServletRequest)

(FilterChain)

---

Filter

Filter

Filter

---

Servlet

 

* Filter를 생성하지 않으면 특정 작업 없이 Servlet에 도달

* Filter들을 거치며 예외나 오류 발생하면 Servlet까지 도달하지 못함

 

@Override
public void init(FilterConfig filterConfig throws ServletException {
	// 필터 초기화 시 필요한 작업 수행
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
	throws IOException, ServletException {
    // pre-processing : 요청 처리 전에 수행할 작업, ServletRequest 수정
    chain.doFilter(request, response); // 다음 필터로 요청과 응답을 전달
    // post-processing : 응답 처리 후에 수행할 작업, ServletResponse 수정
}

@Override
public void destroy() {
	// 필터가 제거될 때 필요한 정리 작업 수행
}​

 

 

DelegatingFilterProxy
  • 스프링에서 사용되는 특별한 서블릿 필터
  • 서블릿 컨테이너와 스프링 애플리케이션 컨텍스트 간의 연결고리 역할!
  • Filter들은 서블릿 컨테이너(WAS)에서 생성되고, 실행되고, 종료되기 때문에 Spring의 DI, AOP 등의 기능들을 사용할 수 없음
  • 서블릿 필터의 기능을 수행하는 동시에 스프링의 의존성 주입 및 빈 관리 기능과 연동되도록 설계된 필터
  • "SpringSecurityFilterChain" 이름으로 생성된 빈을 Spring IOC Container의 ApplicationContext에서 찾아, Filter의 요청을 스프링으로 위임
  • 실제 보안 처리를 수행하지 않음

 

(Servlet Container)

-----

client

Filter

DelegatingFilterProxy → "SpringSecurityFilterChain" 이름으로 생성되는 FilterChainProxy 빈을 찾아 요청 위임 

FilterChainProxy → 실제 보안 처리 역할 수행

Filter를 통한 모든 보안 처리가 끝나면 → Spring MVC로 요청 전달

Filter

Servlet

-----

 

 

FilterChainProxy
  • SpringSecurityFilterChain 이름으로 생성되는 필터 빈
  • DelegatingFilterProxy로부터 요청을 위임 받고 보안 처리 역할을 함
  • 내부적으로 하나 이상의 SecurityFilterChain 객체들을 가지고 있음
    ≫ 요청 URL 정보를 기준으로 적절한 SecurityFilterChain을 선택하여 필터 호출
  • HttpSecurity를 통해 API 추가 시 관련 필터가 추가됨 (직접 추가 가능!)
  • 사용자의 요청에 대해 필터를 순서대로 호출하여 보안 기능 동작시킴
  • 필요 시 직접 필터를 생성하여 기존의 필터 전, 후로 추가 가능

 

DelegatingFilterProxy

(Spring IOC Container)

-----

FilterChainProxy

- SecurityFilterChain들을 순서대로 호출 ≫ 보안 기능 동작

- 모두 통과하지 못하면 Spring MVC로 요청 전달 X

Spring MVC

-----

 

 

Spring Security가 초기화되고, 서버가 기동 되면

  1. 모든 요청은 최초로 DelegatingFilterProxy를 거쳐서 감 !!
  2. 요청마다 DelegatingFilterProxy는 거쳐야 함
  3. DelgatingFilterProxy를 거쳐야 Spring Security로 들어올 수 있기 때문

 

 

 

 

'spring security' 카테고리의 다른 글

폼 인증 - formLogin()  (0) 2025.01.19
사용자 정의 보안 설정하기  (0) 2025.01.17
WebSecurity / HttpSecurity  (0) 2025.01.13
SecurityBuilder / SecurityConfigurer  (0) 2025.01.13
프로젝트 생성 / 의존성 추가  (0) 2025.01.12