2019-03-26 SpringBoot项目部署遇到跨域问题,记录一下解决历程

近期SpringBoot项目部署遇到跨域问题,记录一下解决历程。

  1. 要严格限制,允许哪些域名访问,在application.properties文件里添加配置,配置名可以自己起:
    cors.allowed.origin=http://10.xx.253.xx:8081,http://localhost:4200
    做前后端分离的时候,这里允许的域名/IP一般都是前端项目所部署的机器。

  2. 添加一个配置类。@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);
    }
}
  1. 正常情况下,启动项目就可以了。但是在实际中,我在CorsConfig类中打断点,发现并没有去加载这个配置类。于是在Application入口添加了下面的注解@ComponentScan(basePackages = {"com.xxx.xxx.xxx.web.config"})这里参数是CorsConfig所在的包名。这时候启动,在CorsConfig里面打断点就可以进来了。
posted @ 2019-03-26 20:53  须小弥  阅读(1126)  评论(0编辑  收藏  举报