정수원님의 **스프링 시큐리티 완전 정복** 강의 내용 기록입니다 !!
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가 초기화되고, 서버가 기동 되면
- 모든 요청은 최초로 DelegatingFilterProxy를 거쳐서 감 !!
- 요청마다 DelegatingFilterProxy는 거쳐야 함
- 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 |