11package com .example .cp_main_be .global .config ;
22
33import com .example .cp_main_be .global .jwt .JwtAuthenticationFilter ;
4+ import java .util .Arrays ;
45import lombok .RequiredArgsConstructor ;
56import org .springframework .context .annotation .Bean ;
67import org .springframework .context .annotation .Configuration ;
910import org .springframework .security .config .http .SessionCreationPolicy ;
1011import org .springframework .security .web .SecurityFilterChain ;
1112import org .springframework .security .web .authentication .UsernamePasswordAuthenticationFilter ;
13+ import org .springframework .web .cors .CorsConfiguration ;
14+ import org .springframework .web .cors .CorsConfigurationSource ;
15+ import org .springframework .web .cors .UrlBasedCorsConfigurationSource ;
1216
1317@ Configuration
1418@ EnableWebSecurity
@@ -20,6 +24,7 @@ public class SecurityConfig {
2024 @ Bean
2125 public SecurityFilterChain securityFilterChain (HttpSecurity http ) throws Exception {
2226 http .csrf (csrf -> csrf .disable ())
27+ .cors (cors -> cors .configurationSource (corsConfigurationSource ())) // CORS 설정 추가
2328 .sessionManagement (
2429 session -> session .sessionCreationPolicy (SessionCreationPolicy .STATELESS )) // 세션 사용 안함
2530 .authorizeHttpRequests (
@@ -39,4 +44,35 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
3944
4045 return http .build ();
4146 }
47+
48+ @ Bean
49+ public CorsConfigurationSource corsConfigurationSource () {
50+ CorsConfiguration configuration = new CorsConfiguration ();
51+
52+ // 모든 출처 허용 (개발 환경)
53+ configuration .addAllowedOriginPattern ("*" );
54+
55+ // 모든 HTTP 메서드 허용
56+ configuration .setAllowedMethods (
57+ Arrays .asList ("GET" , "POST" , "PUT" , "DELETE" , "PATCH" , "OPTIONS" ));
58+
59+ // 모든 헤더 허용
60+ configuration .addAllowedHeader ("*" );
61+
62+ // 인증 정보 포함 허용 (쿠키, Authorization 헤더 등)
63+ configuration .setAllowCredentials (true );
64+
65+ // preflight 요청 캐시 시간 (초)
66+ configuration .setMaxAge (3600L );
67+
68+ // 응답에서 클라이언트가 접근할 수 있는 헤더 설정
69+ configuration .addExposedHeader ("Authorization" );
70+ configuration .addExposedHeader ("Content-Type" );
71+ configuration .addExposedHeader ("Accept" );
72+
73+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource ();
74+ source .registerCorsConfiguration ("/**" , configuration );
75+
76+ return source ;
77+ }
4278}
0 commit comments