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

Angular向SpringBoot发送HTTP请求遭CORS拦截问题求助

解决Angular与SpringBoot之间的CORS拦截问题

嘿,我来帮你排查这个CORS拦截的问题!你已经尝试添加@CrossOrigin注解但请求还是被拦截,咱们一步步梳理可能的原因和解决方案:

1. 路径匹配问题

你客户端请求的URL是http://localhost:8080/api,但后端的@RequestMapping是/api/(注意末尾的斜杠)——这会导致路径不匹配,SpringBoot无法正确映射请求,进而CORS头也不会被添加。

解决方案:

  • 要么修改客户端的URL,加上末尾斜杠:
    const url = 'http://localhost:8080/api/';
    
  • 要么修改后端的@RequestMapping,去掉末尾斜杠:
    @RequestMapping("/api")
    

2. @CrossOrigin的Origin参数格式错误

你写的origins = "http://localhost:4200/"末尾多了斜杠,而浏览器发送的Origin请求头是不带末尾斜杠的(比如http://localhost:4200),两者不匹配就会触发CORS拦截。

解决方案:
把注解里的origins改成不带斜杠的格式:

@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600)

3. 检查注解覆盖或请求方法匹配

  • 确认你的GET请求和后端的@RequestMapping兼容:@RequestMapping默认支持所有HTTP方法,但如果控制器上有更具体的注解(比如@PostMapping),会导致GET请求无法匹配。
  • 如果你的控制器类上也添加了@CrossOrigin注解,类级别的配置会覆盖方法级的,需要确保类级别的配置包含你的Angular地址。

4. 尝试全局CORS配置(替代方法级注解)

有时候方法级的@CrossOrigin会因为配置优先级或其他冲突不生效,这时候可以试试全局CORS配置,覆盖所有/api路径:

创建一个SpringBoot配置类:

@Configuration
public class GlobalCorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**") // 匹配/api下的所有子路径
                .allowedOrigins("http://localhost:4200")
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法
                .allowedHeaders("*") // 允许所有请求头
                .maxAge(3600);
    }
}

5. 查看浏览器控制台的具体错误

打开浏览器开发者工具(F12),切换到Network标签,找到被拦截的请求:

  • 查看请求头里的Origin是否是http://localhost:4200
  • 查看响应头里是否包含Access-Control-Allow-Origin
  • 切换到Console标签,查看具体的CORS错误提示(比如“Origin not allowed”或“Method not allowed”),这能帮你精准定位问题。

内容的提问来源于stack exchange,提问作者Maciej Czarnota

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:05:55