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)에게 요청을 위임.
- 동작 방식:
- 웹.xml 또는 서블릿 설정에 필터로 등록됨.
- 애플리케이션 시작 시, Spring IoC 컨테이너에서 이름이 "springSecurityFilterChain"인 빈을 찾음.
- 이후 요청이 들어오면 해당 빈에게 처리 책임을 넘김.
3️⃣ FilterChainProxy (Spring Security의 핵심 필터 매니저)
- 역할: Spring Security가 사용하는 보안 필터 체인들을 관리.
- 구성:
- 내부에 여러 개의 SecurityFilterChain(보통은 DefaultSecurityFilterChain)을 가짐.
- 각 체인은 특정 RequestMatcher (예: /api/**, /login, /**)에 연결됨.
- 동작 방식:
- 들어오는 요청의 URL을 확인.
- 등록된 SecurityFilterChain 중 가장 적합한 체인 하나만 선택.
- 해당 체인의 필터들만 순서대로 실행.
- 주의 사항:
- 어떤 SecurityFilterChain에도 매칭되지 않으면, 요청은 그대로 서블릿으로 전달됨 (오류 없음).
🔚 전체 흐름 요약
요청
↓
[Servlet Container]
↓
DelegatingFilterProxy
↓
FilterChainProxy
↓
선택된 SecurityFilterChain (with filters)
↓
Spring Controller or Resource