@EnableWebSecurity는
언제 쓰는걸까?
@EnableWebSecurity
- 어노테이션을 등록하여 스프링 시큐리티를 활성화하고 웹 보안 설정을 구성하는데 사용한다.
- 즉, 등록하면 보안과 관련된 빈을 사용할 수 있게 된다.
- @EnableWebSercurity는 자동으로 스프링 시큐리티 필터 체인을 생성하고 웹 보안을 활성화한다.
- 보통 @Configuration과 함께 사용한다.
- 예전에는 WebSecurityConfigurerAdapter와 @EnableWebSecurity 조합이 기본이었다.
- 지금은 WebSecurityconfigurerAdapter를 쓰지 않게되면서 SecurityFilterChain 빈을 직접 등록하는 방식이 표준이 되었다.
SecurityFilterChain
- 실제 보안 규칙(인가/인증/CSRF/CORS 등)을 정의한 빈
- 요청이 들어오면 가장 먼저 FilterChainProxy가 실행된다.
- 이 Proxy가 들어온 요청 URL을 보고 어떤 SercurityFilterChain을 적용할지 고른다.
- 인증(폼 로그인, JWT 토큰 검증, OAuth2 등), 인가(URL에 접근할 권한), CSRF(크로스 사이트 요청 위조 방지 결정), CORS(다른 도메인에서 요청을 허용할지), 세션관리, 헤더 설정 등을 구성 요소로 넣는다.
코드 예시
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
// CSRF 보호 끔, 개발 중이라서 꺼버렸어요
.csrf(csrf -> csrf.disable())
// 인가, URL에 대한 요청에 대해 누구나 접근 가능한 혹은 인증이 필요한지 정의
.authorizeHttpRequests(authz -> authz
// 누구나 접근 가능하도록 허용함
.requestMatchers("/api/register").permitAll()
.requestMatchers("/api/login").permitAll()
.requestMatchers("/h2-console/**").permitAll()
.requestMatchers("/oauth/kakao").permitAll()
.anyRequest().permitAll()
)
// 헤더 설정, H2(DB) 콘솔을 iframe으로 띄우기 위해 설정
.headers(headers
-> headers.frameOptions(frameOptions -> frameOptions.disable()))
// CORS 허용하겠다고 일단 정의하고, 실제 허용 목록은 별도 Bean을 제공한다는 것.
.cors(cors -> {});
return http.build();
}
// 비밀번호 해시 빈, 회원가입 시 해시 저장하고 로그인 시 해시 비교에 필요함.
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
백엔드와 프론트엔드를 나눠 개발하면서, 도메인 주소가 달라 생긴 문제를 해결하기 위해 SecurityConfig 파일을 설정했다. 그리고 데이터베이스와 패스워드 관련하여 생긴 문제도 해결했다.
'🌷 Spring > 개념' 카테고리의 다른 글
[Spring] @RequestMapping이란? (0) | 2025.08.20 |
---|---|
[Spring] CORS와 SOP의 의미, @CrossOrigin와 WebMvcConfigurer 코드 예시 (2) | 2025.08.19 |
[Spring] REST와 API 그리고 REST API란? (1) | 2025.07.16 |
[Spring] GET과 POST 그리고 @GetMapping (7) | 2024.10.22 |
[Spring] @Controller와 @RestController 그리고 상태코드 (4) | 2024.10.18 |