SpringBoot 2.4.x版本解决跨域问题解决方法:
1.通过注入@Bean配置解决跨域问题:
@Bean
public CorsFilter corsFilter() {
// 1.配置CORS信息
CorsConfiguration config = new CorsConfiguration();
// 哪些原始域需要放行
config.addAllowedOriginPattern("*");
// 是否发送Cookie信息
config.setAllowCredentials(true);
// 哪些原始域需要放行(请求方式)
config.addAllowedMethod("*");
// 放行哪些原始域(头部信息)
config.addAllowedHeader("*");
// 暴露哪些头部信息(因为跨域访问默认,所以不能获取到全部的头部信息)
config.addExposedHeader(HttpHeaders.LOCATION);
config.setExposedHeaders(Arrays.asList("JSESSIONID", "SESSION", "token", HttpHeaders.LOCATION,
HttpHeaders.ACCEPT, HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS,
HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, HttpHeaders.COOKIE, HttpHeaders.SET_COOKIE,
HttpHeaders.SET_COOKIE2));
// 2.添加映射路径实例
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", config);
log.info("CorsFilter init end。。。。");
// 3.返回新的CorsFilter.
return new CorsFilter(configSource);
}
2.实现WebMvcConfigurer接口解决跨域问题:
(1).修改前的代码:
@Configuration
public class MyCrosConfig implements WebMvcConfigurer{
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST","PUT", "PATCH", "DELETE")
.maxAge(3600);
}
}
(2).修改后的代码:
注:当allowCredentials是true时,allowedOrigins不能为" * ",可以使用allowedOriginPatterns方法
@Configuration
public class MyCrosConfig implements WebMvcConfigurer{
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
// .allowedOrigins("*")
.allowedOriginPatterns("*")
.allowCredentials(true)
.allowedMethods("GET","POST","PUT","PATCH","DELETE")
.maxAge(1800);
}
}