【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();
}
}