개발하는 자몽

[Spring Security] @EnableWebSecurity 본문

Java/Spring

[Spring Security] @EnableWebSecurity

jaamong 2022. 12. 30. 23:18

@EnableWebSecurity?

@EnableWebSecurity는 URL이 스프링 시큐리티의 제어를 받도록 만드는 어노테이션이다. @EnableWebSecurity 어노테이션을 사용하면 내부적으로 SpringSecurityFilterChain이 동작하여 URL 필터가 적용된다. 스프링 시큐리티의 세부 설정은 SecurityFilterChain 빈을 생성하여 설정할 수 있다. 

 

공식문서에서는 아래와 같이 설명하고 있다.

Add this annotation to an @Configuration class to have the Spring Security configuration defined in any WebSecurityConfigurer or more likely by exposing a SecurityFilterChain bean : ...

@EnableWebSecurity를 @Configuration 클래스에 추가하면, SecurityFilterChain 빈을 노출하여 모든 WebSecurityConfigurer에 SpringSecurity 구성이 정의되거나 더 가능성이 높아진다.

 

@EnableWebSecurity의 내부

이번에는 해당 어노테이션의 코드를 살펴보자.

SpringWebMvcImportSelector, OAuth2ImportSelctor는 특정 클래스를 import 하는 Selector이다. 내부 코드를 살펴보면 WebMvcSecurityConfiguration에서 정보를 읽어서 적용시키거나 OAuth2와 관련된 ClientRegistration을 가져오는 것을 알 수 있다.

 

HttpSecurityConfiguration은 HttpSecurity Bean을 주입해주는 클래스이다.

@Bean
...(HttpSecurity http) {
	...
}

 

해당 클래스는 httpSecurity라는 bean을 생성한다. 내부 코드를 보면 Scopeprototype으로 되어있는데, 빈을 주입받을 때마다 새로 생성함을 알 수 있다. 이 외에 초기값은 withDefault로 지정된다.

HttpSecurityConfiguration의 httpSecurity() 메소드 코드의 일부분

 

WebSecurityConfiguration는 스프링 시큐리티 자동설정 중 가장 중요한 부분이다. 개발자가 등록한 SecurityFilterChain과 WebSecurityCustomizer를 WebSecurity 객체로 만들어준다. 내부 코드의 양이 많아서 가져오지는 않았지만, Adapter를 등록하고 개발자가 등록한 SecurityFiterChain 빈들을 받아와 FilterInterceptor, WebSecurityCustomizer.customize와 같은 동작들을 수행한 뒤 WebSecurity 객체를 생성한다.

 

마지막으로 WebSecurity는 WebSecurityConfiguration에서 SpringSecurityFilterChain(springSecurityFilterChain)으로 알려진 FilterChainProxy를 생성하기 위해 생성된다. FilterChainProxy는 고정된 빈 이름(bean name)으로 springSecurityFilterChain이며 빈으로 등록된다.
WebSecurity 클래스는 FilterChainProxy를 만들어서 DelegatingFilterProxy의 실제 처리를 담당한다.
 

 

 

 

 

 

참고

 

3-05 스프링 시큐리티

* `[완성 소스]` : [https://github.com/pahkey/sbb3/tree/3-05](https://github.com/pahkey/sbb3/tree/3-05) …

wikidocs.net

 

스프링부트 해부학 : Security(1) - @EnableWebSecurity

@EnableWebSecurity를 해야하는 이유와 했을 때 어떠한 일이 벌어지는지 더 나아가 Spring Security의 Filter원리는 어떠한 방식으로 이루어지는지 알 수 있습니다

velog.io

Comments