Spring Security 구조

KimSeonGyu·2023년 8월 25일
0
post-thumbnail

이전 포스팅까지 간단한 인증과 인가에대한 개념과 JWT 발급에대해 언급했습니다. 이제 이 토큰을 가지고 인증과 인가를 어떻게 하는지에 대해 정리해 보려 합니다.

Spring security

Spring Security는 Java 기반의 보안 프레임워크이다. 이 프레임워크로 인증과 인가를 관리하려 합니다.

Spring Security 6.0 버전 기준으로 WebSecurityConfigurerAdapter를 완전 사용할 수 없게 됐다고 한다. 공부 이전에 deprecated 되어 따로 언급은 하지 않겠습니다.

이제 Spring Security의 SecurityFilterChain이라는 필터 객체를 사용합니다.

Security Filter Chain: Spring Security는 여러 개의 보안 필터를 체인 형태로 구성하여 요청에 대한 보안 처리를 수행합니다. 각 필터는 특정한 보안 작업을 수행하며, 필요한 경우 커스터마이징할 수 있습니다.

Security의 구조

우선 간단히 서블릿 컨테이너의 작동방식은 다음과 같습니다.

  1. 서블릿 컨테이너는 클라이언트 요청을 받는다.

  2. 해당 요청이 어떤 웹 애플리케이션으로 가야 하는지 결정하고, 필터와 서블릿을 연결하여 작업을 처리합니다.

  3. 필터는 요청 전후에 작업을 수행하고, 서블릿은 요청을 처리하고 응답을 생성합니다.

  4. 이후 필터가 다시 응답을 후처리하여 클라이언트에 전달됩니다.
    (이를 통해 보안, 로깅, 인코딩 등 다양한 작업을 처리하며 웹 애플리케이션을 관리합니다.)

그림에서 DelegatingFilterProxy는 스프링에서 제공하는 필터입니다. 이 필터는 프록시 역할을 하기때문에 필터체인에 속하지않은 객체를 필터로 등록하고 작동시킬수 있도록 해줍니다.

FliterChainProxy

DelegatingFilterProxy와 같은 프록시 기능을 수행합니다.
하지만 DelegatingFilterProxy와 다른점이 존재합니다.

  1. 핵심 보안 필터 체인을 관리하는 데 사용됩니다.

  2. 보안 필터 체인에는 여러 개의 보안 필터가 연결되어 있으며, 이 필터들이 요청에 대한 보안 작업을 처리합니다.

  3. FilterChainProxy는 보안 필터 체인의 역할을 수행하고, 각 요청마다 필요한 보안 필터들을 순차적으로 실행합니다.

SecurityFilterChain

필터들이 묶여있는 필터 체인으로 여러개 존재할 수 있는 구조입니다. FilterChainProxy를 통해 요청에 매칭됩니다.


요약

DelegatingFilterProxy:

  1. Spring Security에서 보안 기능을 활성화하기 위해 사용되는 필터.
  2. 서블릿 컨테이너에서 등록된 DelegatingFilterProxy는 요청을 Spring의 ApplicationContext로 전달.
  3. ApplicationContext 내부에서 Spring Security의 FilterChainProxy에 요청을 위임하고, 보안 필터 체인의 처리 과정이 시작됨.

FilterChainProxy:

  1. Spring Security의 핵심적인 필터 체인.
  2. 여러 개의 보안 필터들을 체인 형태로 연결하여 요청의 보안 작업을 처리.
    각각의 필터는 특정한 보안 작업을 수행하며, 예를 들어 인증, 권한 부여 등을 처리.
  3. 필터 체인은 요청이 들어올 때 순차적으로 필터를 통과하며 처리.
  4. 필터 체인을 통과하는 동안 요청과 응답이 필터링되어 보안 기능이 적용됨.

서블릿 컨테이너는 클라이언트의 요청을 받아 서블릿 또는 필터로 전달하게 됩니다. 필터는 요청과 응답을 필터링하여 처리하며, Spring Security의 DelegatingFilterProxy는 요청을 Spring의 ApplicationContext로 전달하고 FilterChainProxy를 통해 보안 기능을 처리합니다.
FilterChainProxy는 Spring Security의 핵심 보안 기능을 담당하는 여러 보안 필터들의 체인입니다.

profile
공부한 내용을 작성하는 블로그 입니다. 수정할 부분이 있다면 편하게 댓글 작성부탁드립니다!

0개의 댓글