Spring/Spring Security

[Spring Security] 2. 스프링 시큐리티 주요 아키텍처

noahkim_ 2021. 7. 28. 11:01

1. 위임 필터 및 필터 빈 초기화

DelegatingFilterProxy

  • 요청 처리 용 (FilterChain에 등록됨)
  • Spring 제공 (Filter 인터페이스 구현)

 

위임자
  • Spring에 등록된 Bean Filter 사용
  • FilterChainProxy
    • Bean Filter를 체이닝한 Proxy Bean
    • 작업 처리를 위임받습니다.
  • FilterChainProxy 찾기: 'springSecurityFilterChain'라는 이름으로 Bean을 검색하여 찾습니다.

 

브릿지
  • Servlet Container와 ApplicationContext 통합 (다른 라이프사이클 해결)
    • FilterChain은 Servlet Container가 초기화 전에 Bean Filter의 인스턴스를 가지고 있어야 합니다.
    • 그러나 FilterChain 초기화 중엔 Bean Filter를 인식할 수 없습니다.
    • Bean Filter는 FilterChain을 구성한 후에 등록됩니다. 
      • Bean Filter를 초기화하는 ApplicationContext는 ContextLoaderListener에 의해 초기화되고,
      • ContextLoaderListener는 Servlet Container가 초기화 된 후의 이벤트 리스너가 호출됩니다.
  • FilterChainProxy를 lazy하게 초기화합니다.
    • ApplicationContext가 구성된 후에 사용할 수 있기 때문입니다.
    • 클라이언트로부터 요청이 올 경우 초기화합니다.

 

FilterChainProxy

  • 'springSecurityFilterChain'란 이름으로 생성된 Bean Filter 입니다
  • 실제 필터 기능 담당
    • DelegatingFilterProxy으로 부터 요청을 위임 받음
    • FilterChainProxy는 ApplicationContext의 SecurityFilterChain에게 작업 위임
  • Bean Filter를 가지고 있음
    • 커스터마이징된 필터를 FilterChain에 추가할 수 있음 (설정클래스에서 API를 통해)

 

SecurityFilterChain

  • 보안 필터들의 체인 순서 정의
  • 필터의 호출에 있어서 유연성 제공
    • FilterChainProxy는 요청에 사용될 SecurityFilterChain를 결정합니다.
    • 요청 API와의 패턴이 일치하는 SecurityFilterChain가 선택됨 (동작할 보안 필터 정해짐)

 

 

 

 2. 필터 초기화와 다중 보안 설정

  • 설정클래스 별로 보안 기능이 각각 동작
  • 설정클래스 별로 RequestMatcher 설정
  • 설정클래스 별로 필터가 생성
  • FilterChainProxy가 각 필터를 가지고 있음
  • 요청에 따라 RequestMatcher와 매칭되는 필터가 작동하도록 함

 

3. 인증 개념 이해

인증 (Authentication)

  • 당신이 누구인지 증명하는 것
  • 사용자의 인증 정보를 저장하는 토큰 개념
  • 인증 시 id와 password를 담고 인증 검증을 위해 전달되어 사용됩니다.
  • 인증 후 최종 인증 결과를 담고 SecurityContext에 저장되어 전역적으로 참조가 가능합니다.
  • 인증 전
    • principal(ID), credentials(pwd), authorities(권한 목록), details(인증 부가 정보), Authenticated(인증 여부)

 

Provider

  • 인증을 처리하는 주체
  • 인증 성공 시
    • UsernamePasswordAuthenticationToken 을 전달받습니다.

 

 

참고