スプリングブートのバージョン:
2.7.8
クロスドメインの問題
ブラウザの同一オリジンポリシー制限のため。同一生成元ポリシー (同一生成元ポリシー) は、ブラウザの中核かつ最も基本的なセキュリティ機能である規約であり、同一生成元ポリシーが存在しない場合、ブラウザの通常の機能に影響を与える可能性があります。Web は同一オリジン ポリシーに基づいて構築されており、ブラウザは同一オリジン ポリシーの実装にすぎないと言えます。
同一生成元ポリシーは、あるドメインの JavaScript スクリプトが別のドメインのコンテンツと対話することを防ぎます。いわゆる同一オリジン(つまり、同じドメイン内)とは、2 つのページが同じプロトコル(protocol)、ホスト(host)、ポート番号(port)を持つことを意味します。
クロスドメインってどうなの?
リクエスト URL のプロトコル、ドメイン名、ポートのいずれかが現在のページ URL と異なる場合、それはクロスドメインです。
解決
構成クラスを追加する
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class CorsConfig {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 允许任何域名使用
corsConfiguration.addAllowedOriginPattern("*");
// 允许任何头
corsConfiguration.addAllowedHeader("*");
// 允许任何方法(post、get等)
corsConfiguration.addAllowedMethod("*");
corsConfiguration.setAllowCredentials(true);
return corsConfiguration;
}
//下面两个方法二选一
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// 对接口配置跨域设置
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
// 下面代码是将一个名为corsFilter的CorsFilter过滤器注册到Servlet容器中。具体来说,setOrder(-101)方法设置了该过滤器的执行顺序为最低优先级。当请求到达Web应用程序时,CorsFilter过滤器将首先被执行,以检查是否需要进行跨域请求的CORS处理。如果需要进行跨域请求的CORS处理,则CorsFilter过滤器将允许请求通过,否则将拒绝请求并返回错误响应。
@Bean
public FilterRegistrationBean corsFilterBean() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// 对接口配置跨域设置
source.registerCorsConfiguration("/**", buildConfig());
CorsFilter corsFilter = new CorsFilter(source);
FilterRegistrationBean<CorsFilter> filterRegistrationBean = new FilterRegistrationBean<>(corsFilter);
filterRegistrationBean.setOrder(-101);
return filterRegistrationBean;
}
}