Spring Boot EnableWebSecurity
TMTSpring Security 5.7 버전 이상에서는 @EnableWebSecurity
애노테이션 없이도 SecurityFilterChain
빈을 정의하는 것만으로 Security 설정이 가능합니다.
이는 Spring Boot의 자동 구성(Auto-Configuration) 덕분입니다. 아래에서 자세히 설명드리겠습니다.
1. @EnableWebSecurity
의 역할 (과거 vs. 현재)
구분 | 설명 |
---|---|
Spring Security 5.6 이전 | @EnableWebSecurity 를 명시해야 Security 설정이 활성화되었습니다. |
Spring Security 5.7+ | SecurityFilterChain 빈을 정의하면 자동으로 Security가 활성화됩니다. |
2. 왜 @EnableWebSecurity
가 필요 없나요?
- 자동 구성 개선: Spring Boot 2.7+부터는
SecurityFilterChain
빈이 존재하면 자동으로 Security를 활성화합니다. - 코드 간소화: 애노테이션 없이 설정 클래스와 빈 정의만으로 충분합니다.
3. 예시: @EnableWebSecurity
없이 설정
@Configuration
public class SecurityConfig {
// SecurityFilterChain 빈만 정의하면 OK
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/public/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.permitAll()
);
return http.build();
}
}
4. 주의사항
(1) 여러 SecurityFilterChain
빈이 있는 경우
@Order
애노테이션으로 우선순위를 지정해야 합니다.@Bean @Order(1) public SecurityFilterChain apiFilterChain(HttpSecurity http) { ... }
(2) 커스텀 설정 비활성화 필요 시
- Security를 완전히 끄려면
application.yml
에서 설정합니다.spring: security: enabled: false
5. @EnableWebSecurity
를 사용해야 하는 경우
- 레거시 코드 호환성: 예전 버전의 Spring Security (5.6 이하)를 사용할 때.
- 명시적 활성화: Security 설정 클래스임을 강조하고 싶을 때 (필수는 아님).
✅ 결론
- 필요 없음: Spring Boot 2.7+/3.x + Spring Security 5.7+ 환경에서는
@EnableWebSecurity
없이도 정상 작동합니다. - 코드 청사진:
SecurityFilterChain
빈만 정의하면 Spring Boot가 나머지를 처리합니다.