【Spring Security】CORSの設定
SpringBoot
2024/03/09
前提
ここではSpring SecurityのCORSの設定について説明します。 CORSについてよくわからない方は、こちらの記事を参考にしてください。 またSpring BootのCORSの設定が関係しているため、こちらの記事も参考にしてください。
設定方法
Spring Securityでは、様々なフィルターが実行されており、その中の1つにCorsFilter
が動作しています。
CorsFilter
については、Spring Bootでの設定の記事に記載しています。
つまり、Spring Securityでも、Spring Bootと同様の設定になりますが、少しだけ記載方法が異なります。
WebSecurityConfig.java
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain secutiryFilterChain(HttpSecurity http) throws Exception {
http.cors((cors) -> cors.configurationSource(corsConfigurationSource()))
.csrf((csrf) -> csrf.disable());
return http.build();
}
private CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("http://localhost:3000"));
configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));
configuration.setAllowedHeaders(Arrays.asList("X-Custom-Header"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
Spring Securityでは、フィルターの設定はSecurityFilterChain
で行います。
CORSは、HttpSecurity
のcors()
が該当します。
CORSの設定自体はSpring Bootの場合と同じでCorsConfigurationSource
に行い、引数として渡せば完了です。
内容は同じですが、以下のようにCorsConfigurationSource
に@Bean
を付与する方法もあります。
WebSecurityConfig.java
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain secutiryFilterChain(HttpSecurity http) throws Exception {
http.cors(Customizer.withDefaults())
.csrf((csrf) -> csrf.disable());
return http.build();
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("http://localhost:3000"));
configuration.setAllowedMethods(Arrays.asList("*"));
configuration.setAllowedHeaders(Arrays.asList("*"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
CORSを無効果する場合は、以下のようにdisable()
を使用します。
WebSecurityConfig.java
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain secutiryFilterChain(HttpSecurity http) throws Exception {
http.cors((cors) -> cors.disable())
.csrf((csrf) -> csrf.disable());
return http.build();
}
}