Spring Boot EnableWebSecurity

TMT

Spring 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가 나머지를 처리합니다.
Edit this page