본문 바로가기
  • Coding & Book
Back-End/Springboot

Spring Security Filter 대해 알아보자

by 루이3 2025. 1. 21.

Spring Security

Spring Security에서는 사용자 인증(Authentication), 인가(Authorization), 및 취약점 처리를 위해 Servlet 명세에서 제공하는 Servlet Filter를 사용합니다.

Filter는 Servlet보다 앞에 위치하여 사용자의 HTTP 요청과 응답을 가로채고 별도의 처리를 수행하는 역할을 합니다.

Spring Security의 대부분의 기능은 이러한 Filter를 기반으로 동작하며, Filter 개념은 Spring Security의 핵심 개념 중 하나입니다.

 

필터체인 소개

  • 필터체인은 다양한 보안 옵션을 제공합니다.
  • 코드에 등록된 애플리케이션에 인증 기능이 동작하면,
    등록된 어플리케이션이 빈으로 등록되지 않은 경우에도 인증이 가능합니다.
  • 기본 옵션만 사용할 수도 있고, 로그인 페이지, 비밀번호 생성 등을 커스터마이징 할 수 있습니다.
  • 원하는 보안 기능을 등록한 후, 개발자가 직접 등록하면, 등록한 코드가 기존 필터체인을 덮어 동작하도록 설정할 수 있습니다.
  • 필터체인은 여러 개의 필터를 포함하고 있으며, 개발자가 필요한 보안 기능을 직접 구현할 수 있습니다.

 

FilterChain

여러 개의 Filter가 존재할 수 있으며, 이들은 FilterChain으로 구성됩니다.

FilterChain은 일련의 필터들을 연결하여 체인 형태로 사용자가 요청한 작업을 처리하거나 차단하는 역할을 합니다.

각 필터는 순차적으로 요청을 처리하며, 모든 필터가 요청을 통과하면 최종적으로 Servlet이 호출됩니다.

Filter에는 인증 처리를 위한 필터 프록시가 촌재하며 스프링 필터 내부에서 인증 기능과 취약점 처리 기능을 수행합니다.

 

 

DeligatingFilterProxy

DelegatingFilterProxy Servlet의 Filter 인터페이스를 구현하는 클래스로, 서블릿과 Spring 사이의 중개자 역할을 합니다. 이 클래스는 스프링에서 관리하는 빈 필터에게 요청을 위임(delegating)합니다.

스프링 부트의 자동 구성 기능에 의해 서블릿 컨테이너에 등록되며,

스프링 웹 애플리케이션에 들어오는 모든 HTTP 요청을 가로챕니다.

 

 

FilterChainProxy

 

FilterChainProxySpring 빈으로 등록되며, 서블릿 필터와 스프링 필터 사이의 가교 역할을 수행합니다.

그리고 스프링 컨테이너에서 관리되며 이 객체는 Filter 인터페이스를 구현하고, DelegatingFilterProxy의 대리자 역할을 수행합니다.

FilterChainProxySecurityFilterChain의 빈에게 요청을 전달하고, 이 SecurityFilterChain이 포함한 필터들을 차례로 호출하여 보안 관련 처리를 진행합니다.

 

 

 

SecurityFilterChain

체인은 보안 관련 작업을 수행하는 여러 개의 개별 Security Filter로 구성됩니다.

SecurityFilterChainDelegatingFilterProxy를 통해 동작합니다.

 FilterChainProxy 객체에게 필터 체인을 위임합니다.

이 객체는 실제로 SecurityFilterChain을 호출하고, 각 보안 필터를 순차적으로 적용하여 요청을 처리합니다.

각각의 필터는 HTTP/HTTPS 요청에 대해 적절한 보안 처리를 담당합니다.

 

  • 요청 처리: 사용자의 HTTP/HTTPS 요청을 가로채어 보안 처리를 적용합니다.
  • 필터 호출: 요청에 따라 적절한 개별 필터를 호출하여 보안 처리를 수행합니다.

 

 

doFilter

스프링 시큐리티에서는 DelegatingFilterProxy가 doFilter 메서드를 구현하며, 이를 통해 스프링 시큐리티의 SecurityFilterChain에 요청을 전달합니다. DelegatingFilterProxy는 요청을 FilterChainProxy에 위임하고, 이 체인은 보안 필터 체인에 정의된 각 필터를 차례로 호출하여 보안 처리를 수행합니다.

 

 

 

 

 

 


틀린 부분이 있을 시 알려주시면 바로 정정하겠습니다^^