• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Spring Security 초기화 - DelegatingFilterProxy, FilterChainProxy, SecurityFilterChain, WebSecurity
        2025년 01월 28일
        • starryeye
        • 작성자
        • 2025.01.28.:13
        반응형

        지난 포스팅에서

        HttpSecurity(SecurityBuilder) 로 SecurityConfigurer 를 이용하여

        다양한 Servlet Filter 를 포함하는 SecurityFilterChain 을 생성하는 과정을 알아보았다.

         

        이번엔..

        SecurityBuilder 의 또다른 구현체인 WebSecurity 에 대해 알아보겠다.

         

         

        WebSecurity

        위 코드는 WebSecurityConfiguration 클래스 중 일부이다.

        this.securityFilterChains, this.httpSecurity 필드는

        WebSecurityConfiguration 객체에서 의존성 주입을 받은 것이다.

        따라서, WebSecurity 는 이전 포스팅에서 봤던 SecurityFilterChain, HttpSecurity 를 이용하여 빌드한다는 것을 알 수 있다.

         

        WebSecurity 는 내부에 SecurityFilterChain 을 담는 객체이고

        WebSecurity 의 build 메서드를 호출하여 WebSecurity::performBuild 를 수행함으로써 최종적으로

        springSecurityFilterChain 이름을 가진 FilterChainProxy 타입의 Servlet Filter 를 빈으로 등록한다.

        아래는 WebSecurity 의 perfomBuild 메서드 코드의 일부이다.

        코드를 보면, FilterChainProxy 에 SecurityFilteChain 을 넣고 생성을 하며

        최종적으로 리턴하는 것을 볼 수 있다.

         

         

        그러나.. FilterChainProxy 는 Servlet Filter 를 상속한 객체이기는 하나

        실제 런타임에 Servlet Filter 로써 등록이 되어야 작동을 할 것이다..

         

        위 코드는 SecurityFilterAutoConfiguration 클래스에서

        DelegatingFilterProxyRegistrationBean 타입의 빈을 등록하는 코드이다.

        파라미터로 springSecurityFilterChain 을 넣어주고 있는 것을 볼 수 있으며,

        이는 스프링 컨테이너를 이용하여 springSecurityFilterChain 이름을 가진 FilterChainProxy 객체에  접근할 것임을

        간접적으로 알 수 있다.

         

         

        DelegatingFilterProxy

        DelegatingFilterProxy 는..

        실제 서블릿 컨테이너에 등록되는 Servlet Filter 이며

        springSecurityFilterChain 이름을 가진 FilterChainProxy 객체에 Client 요청을 위임한다.

        위 캡쳐는 DelegatingFilterProxy 가 Servlet Filter 로써 doFilter 로직에서 요청을 위임하는 것을 볼 수 있다.

         

         

        요청 관점 정리

        Client 의 요청이 Server 로 들어오면..

        1. Servlet Container 에 관리되는 Servlet Filter 인 DelegatingFilterProxy 가 요청을 받는다.

        2. DelegatingFilterProxy 는 Spring Container 에 관리되고 springSecurityFilterChain 이름을 가진 FilterChainProxy 에 요청을 위임한다.

        3. FilterChainProxy 에는 내부에 SecurityFilterChain 이 존재하며..

        SecurityFilterChain 내부에는 수많은 인증, 인가 기능에 관련된 Filter 들이 존재한다.

        4. 해당 filter 들을 순차적으로 filter 로직을 수행한다.

         

        생성 초기화 관점 정리

        spring security 의존성을 프로젝트에 설정하면..

        1. auto configuration 에 의해 HttpSecurity(SecurityBuilder 구현체) 이 기본적으로 빈으로 등록된다.

        2. 개발자는 HttpSecurity 를 주입 받아서 HttpSecurity 에 다양한 인증, 인가 관련 SecurityConfigurer 를 설정 후,

        build 하면 SecurityFilterChain 이 빈으로 등록된다.

        3. WebSecurity(SecurityBuilder 구현체) 는 auto configuration 로직에 의해 생성되고 빌드된다.

        생성될 때, 이미 만들어 놓은 HttpSecurity, SecurityFilterChain 을 가지고

        springSecurityFilterChain 이름을 가진 FilterChainProxy 를 만들고 빈으로 등록한다.

        4. FilterChainProxy 는 Servlet Filter 인 DelegatingFilterProxy 에 의해 호출 되도록 구성된다.

        반응형

        'Spring > Security' 카테고리의 다른 글

        Spring Security 초기화 - HttpSecurity, SecurityConfigurer, SecurityFilterChain  (0) 2025.01.28
        Spring Security 초기화 - 의존성에 의한 자동 구성  (0) 2025.01.28
        Spring Security 소개  (0) 2025.01.28
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바