정수원님의 **스프링 시큐리티 완전 정복** 강의 내용 기록입니다 !!
HttpSecurity
- HttpSecurityConfiguration에서 HttpSecurity를 생성하고 초기화함
- 보안에 필요한 각 설정 클래스와 필터들을 생성하고 최종적으로 SecurityFilterChain 빈 생성
HttpSecurity
↓
보안에 필요한 각각의 Configurer 생성
↓
build()
↓
각각의 Filter 생성
↓
Filter들을 포함하는 SecurityFilterChain 빈 생성
SecurityFilterChain
- 여러 개의 Filter들의 목록을 관리
- SecurityFilterChain ≫ 인터페이스
- DefaultSecurityFilterChain ≫ 기본으로 제공되는 구현체
- 인터페이스에 boolean matches(HttpServletRequest request) / List<Filter> getFilters() 메소드 포함
boolean matches(HttpServletRequest request)
- 요청이 현재 SecurityFilterChain에 의해 처리되어야 하는지 여부를 결정
* HttpSecurity는 여러 개의 SecurityFilterChain을 생성할 수 있음
* 각 요청은 특정 SecurityFilterChain에 의해 처리되어야 함
- true 반환하면 ≫ 현재 요청이 이 필터 체인에 의해 처리되어야 함을 의미
- false 반환하면 ≫ 다른 필터 체인이나 처리 로직에 의해 처리되어야 함을 의미
- 특정 요청에 대해 적절한 보안 필터링 로직이 적용될 수 있도록 함
List<Filter> getFilters()
- 현재 SecurityFilterChain에 포함된 Filter 객체의 리스트를 반환
- 어떤 필터들이 현재 필터 체인에 포함되어 있는지 확인
≫ 각 필터는 요청 처리 과정에서 특정 작업 (인증, 권한 부여, 로깅 등) 수행
요청에 대해 어떤 필터 체인 목록을 가져올 것인가 ≫ matches(request)
↓
true이면 해당 필터를 가져옴 ≫ getFilters()
↓
요청을 처리
SecurityFilterChain의 역할 전체 흐름
client
↓
request (예: http://localhost:8080/users)
↓
SecurityFilterChain (Filters / RequestMatcher 포함)
RequestMatcher ≫ 해당 요청이 이 RequestMatcher에 의해 처리되어야 하는지 판단 : matches(request)
true ≫ Filters를 가져옴 : getFilters()
false ≫ 다른 필터체인에 의해 처리됨
↓
Filters에 대해 chain.doFilter() ≫ 각각의 filter들에 대해 요청 진행
↓
Filters에 대한 모든 요청이 처리되면
↓
Servlet으로 전달
WebSecurity
- WebSecurityConfiguration에서 WebSecurity를 생성하고 초기화 진행
- WebSecurity는 HttpSecurity에서 생성한 SecurityFilterChian 빈들을 SecurityBuilder에 저장
- WebSecurity가 build() 실행 ≫ SecurityBuilder에서 SecurityFilterChain들을 꺼내서 FilterChainProxy에 저장
WebSecurityConfiguration
↓
WebSecurity 생성
↓
SecurityBuilder에 HttpSecurity들이 생성한 SecurityFilterChain 빈들을 저장
↓
build()
↓
최종적으로 FilterChainProxy 생성
SecurityFilterChains라는 필드에 SecurityFilterChain 빈들의 리스트를 저장
FilterChainProxy
- 여러 HttpSecurity가 생성한 여러 SecurityFilterChain 빈들을 모두 가지고 있음
- SecurityFilterChain을 통해 인증/인가 등 보안 처리를 함
- 생성된 모든 SecurityFilterChain 빈들을 통해 보안 처리를 수행하는 것은 FilterChainProxy에서 !
- 중요한 SecurityFilterChain / FilterChainProxy 클래스를 생성한 주체는 각각 HttpSecurity와 WebSecurity
- FilterChainProxy는 SecurityFilterChain 빈들을 포함하기 때문에 더 상위 개념
'spring security' 카테고리의 다른 글
폼 인증 - formLogin() (0) | 2025.01.19 |
---|---|
사용자 정의 보안 설정하기 (0) | 2025.01.17 |
DelegatingFilterProxy / FilterChainProxy (0) | 2025.01.13 |
SecurityBuilder / SecurityConfigurer (0) | 2025.01.13 |
프로젝트 생성 / 의존성 추가 (0) | 2025.01.12 |