之前项目配置跨域没问题,新做一个项目就不行啦,写一下解决过程。
之前项目,spring-boot版本2.3.12.RELEASE,spring-cloud版本Hoxton.SR12。
跨域配置
@Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedMethod("*");
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.setMaxAge(3600L);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
}
新项目,spring-boot版本2.7.18,spring-cloud版本2021.0.8。
当我直接挪过来配置,发现竟然没生效,一直找不到原因,最后发现是过滤AllowedOrigin配置修改的方法已经变了。新的配置,改为了allowedOriginPatterns。
@Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedMethod("*");
config.allowedOriginPatterns("*");
config.addAllowedHeader("*");
config.setMaxAge(3600L);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
}
后来在官网上看到了纯配置文件方式,决定把CorsConfig干掉,改用springclod的贴心配置。在yml中配置:
spring:
cloud:
gateway:
# 跨域配置
globalcors:
add-to-simple-url-handler-mapping: true
corsConfigurations:
'[/**]':
allowedOriginPatterns: '*'
allowedMethods: '*'
allowedHeaders: '*'
allowCredentials: true