近期SpringBoot项目部署遇到跨域问题,记录一下解决历程。
-
要严格限制,允许哪些域名访问,在application.properties文件里添加配置,配置名可以自己起:
cors.allowed.origin=http://10.xx.253.xx:8081,http://localhost:4200
做前后端分离的时候,这里允许的域名/IP一般都是前端项目所部署的机器。 -
添加一个配置类。@Configuration和@Bean注解一定要加上的。这样SpringBoot在启动的时候才会扫描到你这个类。这里的@Value("${cors.allowed.origin}")引用的就是在application.properties配置的跨域白名单。
@Configuration
public class CorsConfig {
@Value("${cors.allowed.origin}")
private String allowedOrigin;
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowCredentials(true);
corsConfiguration.setMaxAge(24 * 3600L);
if (null != allowedOrigin) {
String[] origins = allowedOrigin.split(",");
for (String origin : origins) {
// 设置访问源地址
corsConfiguration.addAllowedOrigin(origin);
}
}
// 设置访问源请求头
corsConfiguration.addAllowedHeader("*");
// 设置访问源请求方法
corsConfiguration.addAllowedMethod("*");
return corsConfiguration;
}
/**
* Cors过滤器.
*/
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// 对接口配置跨域设置
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
}
- 正常情况下,启动项目就可以了。但是在实际中,我在
CorsConfig
类中打断点,发现并没有去加载这个配置类。于是在Application入口添加了下面的注解@ComponentScan(basePackages = {"com.xxx.xxx.xxx.web.config"})这里参数是CorsConfig
所在的包名。这时候启动,在CorsConfig
里面打断点就可以进来了。