2025. 12. 16. 09:25ㆍSpring Security
🔎 @EnableWebSecurity 어노테이션
@EnableWebSecurity 어노테이션은 Spring Security를 사용하는 데 있어 가장 기본적이면서도 중요한 설정이며, 단순히 보안을 '활성화'하는 것을 넘어 Spring Security의 핵심 인프라를 웹 애플리케이션에 통합하는 복잡한 작업을 수행합니다.
1. Spring Security Configuration의 로딩 및 활성화
@EnableWebSecurity는 내부적으로 Spring Framework의 @Import 메커니즘을 사용합니다. 이 어노테이션이 붙으면, WebSecurityConfiguration 또는 Spring Boot 환경에서는 @Configuration 클래스에 있는 WebSecurityConfigurerAdapter 대체 로직을 불러옵니다.
WebSecurityConfiguration로딩: 이 클래스는 Spring Security의 핵심 설정을 담고 있으며, 보안 인프라를 구성하는 데 필요한 여러 디폴트 빈(Bean)들을 컨테이너에 등록하는 책임을 가집니다.
2. 핵심 빈(Bean) 및 인프라 구축
@EnableWebSecurity가 활성화하는 구성 클래스들은 Spring Security가 작동하는 데 필수적인 다음과 같은 핵심 컴포넌트들을 컨테이너에 등록합니다.
A. FilterChainProxy 빈 등록 및 통합
가장 핵심적인 역할입니다.
FilterChainProxy생성: 이 클래스는javax.servlet.Filter(또는jakarta.servlet.Filter) 인터페이스를 구현하며, Spring Security의 모든 필터 체인의 진입점(Entry Point) 역할을 합니다.- 서블릿 컨테이너 통합: Spring Boot 또는 서블릿 환경에서
FilterChainProxy가 실제 웹 요청을 가로채도록 등록합니다. 이 과정은 일반적으로DelegatingFilterProxy를 통해 이루어지거나, Spring Boot의 자동 구성이 직접FilterChainProxy를 서블릿 필터 체인에 배치함으로써 수행됩니다. - 역할: 모든 HTTP 요청은 이 프록시를 통과하며, 프록시는 요청 URL에 가장 적합한
SecurityFilterChain을 찾아 해당 필터 체인을 실행합니다.
B. AuthenticationManager 구축
AuthenticationManager를 구축하고 컨테이너에 등록할 수 있는 환경을 마련합니다.
- 빌더 준비: Spring Security는 개발자가
@Bean SecurityFilterChain메서드 내에서HttpSecurity를 통해 인증 방식을 정의할 때, 내부적으로AuthenticationManagerBuilder를 사용하여 최종적인AuthenticationManager를 구성하도록 준비합니다. - 디폴트 프로바이더 연결: 앞서 설명했듯이, 개발자가
UserDetailsService빈을 등록하면, 이를 사용하는DaoAuthenticationProvider가AuthenticationManager에 연결되도록 인프라를 준비합니다.
C. WebSecurity 설정 활성화
특정 요청을 보안 필터 체인 자체에서 완전히 제외할 수 있는 기능을 제공하는 WebSecurity 객체와 관련된 설정도 준비합니다.
- 용도: 정적 리소스(CSS, JS, 이미지 파일)에 대한 요청은 보안 검사 없이 빠르게 통과시키고 싶을 때 사용됩니다.
3. 개발자 정의 SecurityFilterChain 빈 수집 및 등록
@EnableWebSecurity는 개발자가 @Bean으로 정의한 하나 또는 여러 개의 SecurityFilterChain 인스턴스를 수집하여 FilterChainProxy에게 전달하는 메커니즘을 활성화합니다.
- 개발자는
HttpSecurity빌더를 사용하여 정의한 모든 보안 규칙(인증, 권한 부여, 세션 관리 등)을 담은SecurityFilterChain을 생성하고,@EnableWebSecurity가 활성화한 인프라가 이 체인들을FilterChainProxy의 내부 목록에 순서대로 등록합니다.
요약: @EnableWebSecurity가 하는 일
| 역할 | 상세 내용 |
|---|---|
| 인프라 활성화 | Spring Security의 핵심 설정 클래스(WebSecurityConfiguration 등)를 @Import하여 필요한 모든 기본 빈들을 컨테이너에 로딩합니다. |
| 요청 진입점 준비 | FilterChainProxy를 생성하고, 이를 서블릿 컨테이너의 필터 체인에 통합하여 모든 HTTP 요청을 가로채도록 합니다. |
| 인증 기반 마련 | AuthenticationManager를 구성하고 관리할 수 있는 환경을 준비하며, UserDetailsService와 같은 기본 인증 Provider의 연결을 지원합니다. |
| 규칙 등록 | 개발자가 정의한 모든 SecurityFilterChain 빈들을 수집하여 FilterChainProxy에게 전달하여 실제 보안 규칙이 요청에 적용되도록 만듭니다. |
결론적으로, @EnableWebSecurity는 Spring Security의 모든 핵심 기능을 구동하기 위한 '엔진 시동' 버튼이자 '배관 공사'를 담당하는 어노테이션이라고 할 수 있습니다.
'Spring Security' 카테고리의 다른 글
| HttpSecurity (0) | 2025.12.16 |
|---|---|
| SecurityFilterChain (0) | 2025.12.16 |
| ch15 Implementing an OAuth 2 resource server (0) | 2024.12.17 |
| ch14 Implementing an OAuth 2 authorization server (0) | 2024.12.16 |
| ch13 What are OAuth 2 and OpenID Connect? (0) | 2024.03.03 |