[스프링 시큐리티] 필터(DelegatingFilterProxy, FilterChainProxy)

2023. 2. 6. 19:12·Spring
반응형

스프링 시큐리티 로고

※ 이 글은 정수원님의 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security 강의를 수강하면서 학습한 내용을 정리한 글입니다. 일부 강의 내용을 인용하였으며, 문제가 될 시 인용 부분을 수정 또는 삭제하겠습니다.

 

필터

WAS에서 실행된 요청이 오면 이 요청이 서블릿으로 들어오는데, 서블릿에 들어오기 전에 처리를 하는 것이 필터.

필터의 흐름

HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러

필터 체인

HTTP 요청 -> WAS -> 필터 1 -> 필터 2 -> 필터 3 -> 서블릿 -> 컨트롤러

DelegatingFilterProxy

이 필터는 Servlet 스펙에 있는 기술이기 때문에 Servlet 컨테이너에서만 생성되고 실행된다. Spring의 Ioc 컨테이너와는 컨테이너가 다르기 때문에 Spring Bean으로 Injection하거나 Spring에서 사용되는 기술을 Servlet에서 사용할 수 없다.

이를 가능하게 해주는 것이 DelegatingFilterProxy 클래스다.  

DelegatingFilterProxy
출처 : 인프런 - 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security

DelegatingFilterProxy는 springSecurityFilterChain 이름으로 생성된 빈을 ApplicationContext에서 찾아 요청을 위임한다. 실제로 보안 처리는 하지 않고 위임만 하는 Servlet Filter다.

DelegatingFilterProxy는 이 Servlet 컨테이너와 Spring의 Ioc 컨테이너를 연결해주는 필터라고 생각하면 된다.

FilterChainProxy

FilterChainProxy
출처 : 인프런 - 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security

 

전체적인 동작 방식을 살펴보자.

Servlet Container - Springboot 동작방식
출처 : 인프런 - 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security

HTTP요청이 들어오면 Servlet 컨테이너에서 요청을 받는다.
Servlet 컨테이너 내의 필터들이 동작하는 중간에 DelegatingFilterProxy Filter가 요청을 받으면 springSecurityFilterChain 이름으로 생성된 빈을 AnnotationConfigServletWebServerApplicationContext 객체에서 찾는다.
이 찾은 Filter Bean이 바로 FilterChainProxy다.


그 후에 FilterChainProxy Bean에 요청을 전달한다. 이제 FilterChainProxy에서 필터들을 이용하여 보안처리를 진행한 후 최종적으로 SpringMVC의 DeispatcherServlet에 전달하여 요청에 대한 Servlet 처리를 하게 된다.


References

스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security - https://www.inflearn.com/course/%EC%BD%94%EC%96%B4-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0/dashboard

Overview and Need for DelegatingFilterProxy in Spring - https://www.baeldung.com/spring-delegating-filter-proxy

스프링 공식 문서 - https://docs.spring.io/spring-security/reference/servlet/architecture.html#servlet-filters-review

반응형
저작자표시 동일조건 (새창열림)
'Spring' 카테고리의 다른 글
  • [Spring AI] 준비 (기본 개념, OpenAI API Key, 크레딧 충전)
  • [스프링 시큐리티] WebSecurityConfigurerAdapter deprecated 대응
  • [스프링 시큐리티] AuthenticationManager, AuthenticationProvider
  • [스프링 시큐리티] HttpSecurity vs WebSecurity
SooJae
SooJae
코드는 효율적으로, 공부는 비효율적으로
    반응형
  • SooJae
    이수재 블로그
    SooJae
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Spring (8)
      • Next.JS (4)
      • React (3)
      • Angular (1)
      • Language (6)
        • Java (1)
        • Kotlin (1)
        • Javascript (4)
      • Keycloak (5)
      • Knowledge (16)
        • Test (4)
        • Web (9)
        • Security (2)
        • Data Structure (1)
      • Infra (9)
        • Proxmox (2)
        • AWS (0)
        • Kubernetes (3)
      • Tools (1)
        • IntelliJ (1)
      • Algorithm (2)
      • Tistory (4)
      • ETC (1)
  • 블로그 메뉴

    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ChatGPT
    웹 마스터 도구
    티스토리챌린지
    spring ai
    오블완
    springboot
    ai
    test
    Functional Programming
    Auth
    javascript
    openAI
    deepl api
    Next.js
    React
    스프링 번역
    keycloak
    스프링 ai
    GPT
    Kotlin
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
SooJae
[스프링 시큐리티] 필터(DelegatingFilterProxy, FilterChainProxy)
상단으로

티스토리툴바