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 을 전달받습니다.
참고
'Spring > Spring Security' 카테고리의 다른 글
[Spring Security] 3-3. 인증: 패스워드 저장소 (0) | 2023.10.02 |
---|---|
[Spring Security] 3-2. 인증: 아이디 / 패스워드 (2) | 2023.10.02 |
[Spring Security] 5. 예외 처리 (0) | 2023.09.30 |
[Spring Security] 3. 인증: 아키텍쳐 (0) | 2021.07.28 |
[Spring Security] 2-1. 인증 필터 (0) | 2021.07.25 |