자동 생성 SecurityFilterChain
build.gradle 파일에 다음 과 같이
의존성이 추가되어있다면
SpringBootWebSecurityConfiguration 클래스에서
SecurityFilterChain Bean을 자동으로 등록한다.
이 부분이고
@ConditionalOnDefaultWebSecurity 부분을 타고가면
한번더 타고가자
그러면 아래의 상황이다
SecurityFilterChain(S.F.C)의 Bean이 없을때가 참인 조건이다.
따라서 우리가 의존성만 추가하고 아무 보안 설정을 하지 않으면
기본으로 스프링이 생성해준다. 따라서 로그인 페이지도 자동으로 생성되는것이다
다시 첫번째 사진을 보면 (1), (2), (3) 세가지를 눈여겨 볼 수 있는데
(1)
스프링이 HttpSecurity 를 자동으로 생성해준다, 따라서 여기서 DI 받을 수 있다.
HttpSecurity 는 스프링 시큐리티의 핵심 필터들을 설정할 수 있는 클래스이다, 우리에게 주인공인 셈이다
그렇기 때문에 return 쪽의 http.build() 즉 빌드를 하면 SecurityFilterChain 을 생성한다
말그대로 보안필터들이 체인처럼 주렁주렁 가지고있다
따라서 요청이 들어오면 필터들이 체인처럼 동작한다
(2)
http 요청에 대한 디폴트 값이 설정된다.
그리고 잘 보면 form 인증과 httpBasic 인증이 기본으로 사용하는 것을 볼 수있다.
(3)
SecurityFilterChain Bean을 등록한다
허나 스프링 시큐리티를 기본 값으로 사용하는 프로젝트는 없을 것이다
따라서, (2) ~ (3)의 과정을 개발자가 애플리케이션에 맞게 커스텀 하는 부분이 되겠다.
참고,
- WebSecurityConfiguration (설정 클래스) 가 WebSecurity 을 생성한다
- HttpSecurityConfiguration (설정 클래스) 가 HttpSecurity 을 생성한다
- HttpSecurity Bean 의 목적은 SecurityFilterChain을 생성하는 목적이라 생각 하면 된다 ★ ★ ★
return 문의 http.build() 메서드를 타고 가면
HttpSecurityConfiguration 의 performBuild() 메서드가 최종적으로 호출된다
이 메서드가 최종적으로 SecurityFilterChain(I) 을 생성하는 메서드 인데
빨간색으로 포인트 한 부분을 보면
요청 패턴과 그에 따른 필터 리스트를 생성자로 넘기는걸 볼 수 있다
(아직 여기서 요청 패턴과 필터를 직접 만들지 않았다, 기본 설정을 따른다)
여기서 보면 요청 패턴과 필터를 프로퍼티에 저장하는걸 볼 수 있다
디버깅 해서 보면 다음과 같다
이 말은 즉,
모든 요청에 대하여 15개의 필터가 동작할 거라는 의미 이다
이렇게 HttpSecurity는 특정 요청에 대한 기본필터 묶음을 강제한다
개발자는 특정 수행하게 필터들을 커스텀한다