SpringBoot的跨域配置没有效果?

1.背景:在项目开发中采用了前后端分离的模式,其中前端用的vue+axios,后端用的springboot。项目开发完成后想要上线,于是前端选择部署到Nginx,整个项目用docker-compose打包到Docker里运行。
2.问题:前端部署到Nginx后(均使用Nginx默认配置,没有修改),使用axios访问后端出现跨域错误,于是按照网上的说法,在SpringBoot后台添加跨域配置:

@Configuration
public class CorsConfig {

    //配置跨域Filter
    @Bean
    public CorsFilter corsFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOriginPattern("*"); //允许任何域名访问
        corsConfiguration.addAllowedHeader("*"); //允许任何请求头访问
        corsConfiguration.addAllowedMethod("*"); //允许任何方法访问
        corsConfiguration.setAllowCredentials(true);//是否允许客户端携带验证信息,例如 cookie 之类的
        source.registerCorsConfiguration("/**",corsConfiguration);//处理所有请求的跨域配置
        return new CorsFilter(source);
    }
}

3.结果:重启项目后,运行仍然报跨域错误,无法访问接口,然后尝试了添加CrossOrigin注解也无效,这是什么原因呢?是Nginx的问题吗,还是说前后端都要配置跨域才行,前端小白求解!!

阅读 3.4k
1 个回答

image.png

具体原因建议看浏览器的控制台报错结果是什么。

但首先这里是有问题的,AllowCredentials 是 true 时,AllowedOrigin 是不允许为通配符 * 的,你必须指定允许的域(即协议+域名/IP+端口,采用协议默认端口时端口可省略)。你可以写在配置里注入进去,或者从请求上下文里直接读取当前客户端的域。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题