Spring-Security

Spring security 필터링 메커니즘

neal89 2025. 5. 20. 08:19

1️⃣ Servlet Filter & FilterChain (기본 자바 서블릿 구조)

  • Filter: HttpServletRequest와 HttpServletResponse를 가로채는 컴포넌트.
    • 예: 로깅, 인증, 인코딩 처리 등.
  • FilterChain: 여러 필터들을 순차적으로 연결해주는 구조.
    • 요청 → 필터1 → 필터2 → … → 서블릿

2️⃣ DelegatingFilterProxy (Spring과 서블릿 컨테이너의 연결 다리)

  • 역할: 서블릿 컨테이너(Tomcat 등)가 인식 가능한 javax.servlet.Filter이지만,
    • 실제로는 Spring이 관리하는 필터 빈(springSecurityFilterChain)에게 요청을 위임.
  • 동작 방식:
    1. 웹.xml 또는 서블릿 설정에 필터로 등록됨.
    2. 애플리케이션 시작 시, Spring IoC 컨테이너에서 이름이 "springSecurityFilterChain"인 빈을 찾음.
    3. 이후 요청이 들어오면 해당 빈에게 처리 책임을 넘김.

3️⃣ FilterChainProxy (Spring Security의 핵심 필터 매니저)

  • 역할: Spring Security가 사용하는 보안 필터 체인들을 관리.
  • 구성:
    • 내부에 여러 개의 SecurityFilterChain(보통은 DefaultSecurityFilterChain)을 가짐.
    • 각 체인은 특정 RequestMatcher (예: /api/**, /login, /**)에 연결됨.
  • 동작 방식:
    1. 들어오는 요청의 URL을 확인.
    2. 등록된 SecurityFilterChain 중 가장 적합한 체인 하나만 선택.
    3. 해당 체인의 필터들만 순서대로 실행.
  • 주의 사항:
    • 어떤 SecurityFilterChain에도 매칭되지 않으면, 요청은 그대로 서블릿으로 전달됨 (오류 없음).

🔚 전체 흐름 요약

요청
 ↓
[Servlet Container]
 ↓
DelegatingFilterProxy
 ↓
FilterChainProxy
 ↓
선택된 SecurityFilterChain (with filters)
 ↓
Spring Controller or Resource