728x90

- SpringWebMvcImportSelector : 인터페이스로, 특정 환경에 따라 다른 설정 파일을 Load 할 수 있도록 도와준다.
- SecurityFilterAutoConfiguration : DelegatingFilterProxyRegistrationBean이라는 빈 클래스를 만들고, 이 빈클래스는 DelegatingFilterProxy를 등록시켜주는 역할을 한다
- DelegatingFilterProxy는 SpringSecurityFilterChain 이름의 빈을 검색하고, 그 빈에게 클라이언트 요청을 위임하는 역할을 한다.
- WebMvcSecurityConfiguration : ArgumentResolver 관련 타입을 클래스를 생성해준다
- AuthenticationPrincipalArgumentResolver : @AuthenticationPrincipal 어노테이션으로 선언이된 변수가 있다면, 자동으로 인증을 받은 Principal 객체를 바인딩해준다.
- CurrentSecurityContextArgumentResolver
- CsrfTokenArgumentResolver
- HttpSecurityConfiguration : HttpSecurity를 생성해 준다
- HttpSecurity는 공통 설정 클래스(~~ Configure)와 필터들을 생성하고, 최종적으로 SecurityFilterChain 빈을 반환한다.
SpringBoot의 자동 설정에 의한 초기화 진행
SpringBootWebSecurityConfiguration : 초기 스프링 부트가 초기화될 때, 아래와 같은 Bean을 초기 설정으로 한 빈을 생성한다.

-
HttpSecurityConfiguration에서 생성한 HttpSecurity 객체를 주입받는다
-
Form 로그인과 Basic 로그인 기능을 추가 정의한 기본 SecurityFilterChain 빈을 정의함
WebSecurityConfiguration : WebSecurity를 만들어준다.

- WebSecurity는 securityFilterChainBuilders라는 속성을 가지고 있고, 내부적으로 SecurityBuilder, SecurityFilterChain을 가지고 있다.
- 초기 아무것도 설정하지 않았을 경우 SpringBoot가 기본적으로 생성해주는 defaultSecurityFilterChain을 SecurityFilterChain으로 가지고 있다.
- build()를 하게 되면, 실제 WebSecurity가 생성이 되고, 최종 결과로, FilterChainProxy 객체가 생성이 되고, SeucirtyFilterChain을 담는 SecurityFilterChains가 생기게 된다.
- WebSecurity / HttpSecurity을 차이
- HttpSecurity는 defaultSecurityFilterChain과 같은 http FilterChain을 만드는 것이고, 이러한 결과는 여러 개가 나올 수 있다. -> 이러한 http는 WebSecurityFilterChain에 저장이 되고, 이를 WebSecurity에서 빌드하는 것
- HttpSecurity < WebSecurity
실습
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http)
throws Exception { //빈이기 때문에 HttpSecurity를 주입 받을 수 있다
http.authorizeHttpRequests().anyRequest().authenticated();
http.formLogin();
//http.apply(new CustomSecurityConfigurer().setFlag(false)); //빌더 패턴과 비슷하게 사용할 수 있다.
return http.build();
}
@Bean
public SecurityFilterChain securityFilterChain2(HttpSecurity http) throws Exception {
//httpSecurity를 각각 생성해야 하므로 httpConfiguration에서 빈이 다르게 생성이 되어야한다
http.authorizeHttpRequests().anyRequest().authenticated();
http.httpBasic();
return http.build();
}
}
- SecurityFilterChain을 반환하는 2개의 빈을 각각 만들게 된다면, httpSecurity를 각각 생성해야 하므로, httpConfiguration에서 빈이 다르게 호출되어야 한다(scope가 prototype이기 때문 -> 싱글톤이 아니다)
728x90
'스프링 시큐리티 OAuth2 > Spring Security Fundamentals' 카테고리의 다른 글
| CORS (0) | 2022.12.20 |
|---|---|
| HttpBasic 인증 (0) | 2022.12.18 |
| 시큐리티 인증 및 인가 흐름 요약 (0) | 2022.12.17 |
| AuthenticationEntryPoint 이해 (0) | 2022.12.17 |
| 초기화 과정 이해(SecurityBuilder / SecurityConfigurer) (0) | 2022.12.02 |