两种配置选其一即可,没有废话,直接上代码:
一、基于CorsFilter的跨域配置
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
return new CorsFilter(this.getSource());
}
public UrlBasedCorsConfigurationSource getSource() {
// 创建CORS配置对象
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 允许的来源 ("*" 表示所有来源)
corsConfiguration.setAllowedOriginPatterns(Collections.singletonList("*"));
// 允许的请求头
corsConfiguration.addAllowedHeader(CorsConfiguration.ALL);
// 允许的请求方法(GET、POST、PUT...)
corsConfiguration.addAllowedMethod(CorsConfiguration.ALL);
// 允许发送身份验证信息(如 cookies)
corsConfiguration.setAllowCredentials(true);
// 暴露响应头 (前端可通过Js代码获取响应头,不写表示暴露所有,null表示都不暴露)
// corsConfiguration.setExposedHeaders(null);
// 创建基于URL的CORS配置源
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// 将CORS配置对象注册到所有路径
source.registerCorsConfiguration("/**", corsConfiguration);
return source;
}
}
二、 基于WebMvcConfigurer的跨域配置
@Configuration
public class CorsFilter implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry
// 配置作用路径
.addMapping("/**")
// 允许的来源 ("*" 表示所有来源)
.allowedOriginPatterns("*")
// 允许的请求头
.allowedHeaders("*")
// 允许的请求方法(GET、POST、PUT...)
.allowedMethods("*")
// 允许发送身份验证信息(如 cookies)
.allowCredentials(true)
// 暴露响应头 (前端可通过Js代码获取响应头,"*"表示所有)
.exposedHeaders("*");
}
}