You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot+Angular Docker部署后CORS跨域问题求助

解决方案

方法1:使用相对路径配置API地址(最适合你的场景)

你的前端已经打包到Spring Boot的static目录,意味着前端页面和API接口由同一个Spring Boot容器提供,完全不需要硬编码绝对地址。

修改Angular的environment.ts(生产环境同步修改environment.prod.ts):

baseUrl: '/api/'

这样前端发起请求时,会自动复用当前页面的域名/IP(比如你访问Docker容器用的http://<服务器IP>:8080或http://localhost:8080)拼接API路径,彻底避免跨域问题。

修改完成后,重新用frontend-maven-plugin打包前端,再重新构建Spring Boot的Docker镜像,最后用docker-compose部署即可。

为什么会出现CORS错误?

本地运行时,前端页面和API请求的地址都是http://localhost:8080,协议、域名、端口完全一致(同源),所以浏览器不会触发CORS限制。但Docker部署后,如果你通过服务器IP(比如http://192.168.1.100:8080)访问前端,而前端仍请求http://localhost:8080/api/,此时页面的源是http://192.168.1.100:8080,请求目标是http://localhost:8080,属于不同源,浏览器就会拦截请求并抛出CORS错误。

备选方案:配置Spring Boot允许跨域(适合前后端分离部署场景)

如果后续需要将前端和后端分开部署,可以在Spring Boot中添加全局CORS配置:

创建配置类:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        // 学习环境允许所有来源,生产环境需指定具体域名
        config.addAllowedOriginPattern("*");
        config.addAllowedMethod("*");
        config.addAllowedHeader("*");
        config.setAllowCredentials(true);
        source.registerCorsConfiguration("/api/**", config);
        return new CorsFilter(source);
    }
}

同时修改Angular的baseUrl为Docker容器所在的真实地址:

baseUrl: 'http://<服务器IP>:8080/api/'

内容的提问来源于stack exchange,提问作者Tamás Mészáros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:52:49