Skip to content

Commit 9b52aa0

Browse files
committed
feat: Spring Security CORS, 인가 규칙 및 Stateless 세션 설정 추가
1 parent 076e529 commit 9b52aa0

1 file changed

Lines changed: 35 additions & 0 deletions

File tree

src/main/java/com/back/web7_9_codecrete_be/global/security/SecurityConfig.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@
88
import org.springframework.security.config.Customizer;
99
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
1010
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
11+
import org.springframework.security.config.http.SessionCreationPolicy;
1112
import org.springframework.security.web.SecurityFilterChain;
1213
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
14+
import org.springframework.web.cors.CorsConfiguration;
15+
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
16+
17+
import java.util.List;
1318

1419
@Configuration
1520
@RequiredArgsConstructor
@@ -36,6 +41,10 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
3641
// H2 Console 설정
3742
.headers(headers -> headers.frameOptions(frame -> frame.disable()))
3843

44+
// 세션 관리 설정 - Stateless
45+
.sessionManagement((session) -> session
46+
.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
47+
3948
// Authorization 설정
4049
.authorizeHttpRequests(auth -> auth
4150
.requestMatchers(
@@ -45,6 +54,13 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
4554
"/h2-console/**", // H2 Console
4655
"/api/v1/concerts/**" // concert 정보 조회 도메인
4756
).permitAll()
57+
58+
// ADMIN 전용
59+
.requestMatchers("/api/v1/admin/**").hasRole("ADMIN")
60+
61+
// USER, ADMIN 허용
62+
.requestMatchers("/api/v1/users/**").hasAnyRole("USER", "ADMIN")
63+
4864
.anyRequest().authenticated()
4965
)
5066

@@ -60,4 +76,23 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
6076
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
6177
return configuration.getAuthenticationManager();
6278
}
79+
80+
// CORS 설정(로컬 프론트 통신 허용)
81+
@Bean
82+
public UrlBasedCorsConfigurationSource corsConfigurationSource() {
83+
CorsConfiguration configuration =new CorsConfiguration();
84+
85+
configuration.setAllowedOrigins(List.of("http://localhost:3000"));
86+
configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
87+
88+
configuration.setAllowedHeaders(List.of("*"));
89+
90+
//쿠키 자동으로 넘어가게 설정
91+
configuration.setAllowCredentials(true);
92+
93+
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
94+
source.registerCorsConfiguration("/api/**", configuration);
95+
96+
return source;
97+
}
6398
}

0 commit comments

Comments
 (0)