11package com .gachigage .global .config ;
22
3+ import java .util .Arrays ;
4+ import java .util .Collections ;
5+ import java .util .Optional ;
6+
37import org .springframework .context .annotation .Bean ;
48import org .springframework .context .annotation .Configuration ;
9+ import org .springframework .context .annotation .Profile ;
510import org .springframework .http .HttpMethod ;
611import org .springframework .security .config .annotation .web .builders .HttpSecurity ;
712import org .springframework .security .config .annotation .web .configuration .EnableWebSecurity ;
1015import org .springframework .security .web .SecurityFilterChain ;
1116import org .springframework .security .web .authentication .AuthenticationSuccessHandler ;
1217import org .springframework .security .web .authentication .UsernamePasswordAuthenticationFilter ;
18+ import org .springframework .web .cors .CorsConfiguration ;
19+ import org .springframework .web .cors .CorsConfigurationSource ;
20+ import org .springframework .web .cors .UrlBasedCorsConfigurationSource ;
1321
1422import com .gachigage .global .login .service .CustomOAuth2UserService ;
1523
@@ -25,7 +33,15 @@ public class SecurityConfig {
2533
2634 @ Bean
2735 public SecurityFilterChain securityFilterChain (HttpSecurity http ,
36+ Optional <CorsConfigurationSource > corsConfigurationSource ,
2837 CustomAuthenticationEntryPoint customAuthenticationEntryPoint ) throws Exception {
38+
39+ if (corsConfigurationSource .isPresent ()) {
40+ http .cors (cors -> cors .configurationSource (corsConfigurationSource .get ()));
41+ } else {
42+ http .cors (AbstractHttpConfigurer ::disable ); // prod 등 빈이 없는 경우 CORS 비활성화
43+ }
44+
2945 http .csrf (AbstractHttpConfigurer ::disable )
3046 .formLogin (AbstractHttpConfigurer ::disable )
3147 .httpBasic (AbstractHttpConfigurer ::disable )
@@ -51,4 +67,18 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http,
5167
5268 return http .build ();
5369 }
70+
71+ @ Bean
72+ @ Profile ("dev" )
73+ public CorsConfigurationSource corsConfigurationSource () {
74+ CorsConfiguration configuration = new CorsConfiguration ();
75+ configuration .setAllowedOriginPatterns (Collections .singletonList ("http://localhost:3000" ));
76+ configuration .setAllowedMethods (Arrays .asList ("GET" , "POST" , "PUT" , "DELETE" , "OPTIONS" ));
77+ configuration .setAllowedHeaders (Collections .singletonList ("*" ));
78+ configuration .setAllowCredentials (true );
79+
80+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource ();
81+ source .registerCorsConfiguration ("/**" , configuration );
82+ return source ;
83+ }
5484}
0 commit comments