如果我们使用前端 Angularjs 和后端 spring-boot,是不是会被 CORS 策略处理阻止?

Posted

技术标签:

【中文标题】如果我们使用前端 Angularjs 和后端 spring-boot,是不是会被 CORS 策略处理阻止?【英文标题】:blocked by CORS policy handling if we using front-end Angularjs and back-end spring-boot?如果我们使用前端 Angularjs 和后端 spring-boot,是否会被 CORS 策略处理阻止? 【发布时间】:2020-03-18 06:12:29 【问题描述】:

在 'http://www.----------.com/efsapi/api/AdvanceQuote 访问 XMLHttpRequest? segmentcode=--&customercode=--&por=--&fdc=--&toscode=--' from origin 'http://localhost:8080' 已被 CORS 策略阻止:对预检的响应 请求未通过访问控制检查:没有“Access-Control-Allow-Origin”标头 存在于请求的资源上(已编辑)

我在 angularjs 中面临这个错误,我们使用 java 作为后端。在前端尝试了下面的代码

'Access-Control-Allow-Origin': true,
 'Content-Type': 'application/json; charset=utf-8',
 "X-Requested-With": "XMLHttpRequest

您能告诉我如何处理这个 CORS 错误吗? (平台 Angularjs 和 Java)

【问题讨论】:

可以在 api 使用 @CrossOrigin 解决 CORS with spring-boot and angularjs not working的可能重复 【参考方案1】:

你面临的问题是java后端阻塞了客户端请求,你需要在后端允许客户端的来源。

来自 spring cors 指南

为单个方法启用 CORS:

为了让 RESTful Web 服务在其响应中包含 CORS 访问控制标头,您只需在处理程序方法中添加一个 @CrossOrigin 注释:

@CrossOrigin(origins = "http://localhost:9000")
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) 
    System.out.println("==== in greeting ====");
    return new Greeting(counter.incrementAndGet(), String.format(template, name));

在全球范围内启用 CORS:

作为基于注释的细粒度配置的替代方案,您还可以定义一些全局 CORS 配置。这类似于使用基于过滤器的解决方案,但可以在 Spring MVC 中声明并结合细粒度的 @CrossOrigin 配置。默认情况下,所有来源和 GET、HEAD 和 POST 方法都是允许的。

public WebMvcConfigurer corsConfigurer() 
    return new WebMvcConfigurer() 
        @Override
        public void addCorsMappings(CorsRegistry registry) 
            registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000");
        
    ;

参考看原文:https://spring.io/guides/gs/rest-service-cors/

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review @nbk 感谢提醒我修改了答案并包含了指南的相关摘录。

以上是关于如果我们使用前端 Angularjs 和后端 spring-boot,是不是会被 CORS 策略处理阻止?的主要内容,如果未能解决你的问题,请参考以下文章

前端和后端开发有啥区别吗?

前端开发和后端开发有啥区别

前端(SPA)和后端解耦:JWT 认证 + 持久登录

如何在前端和后端存储 JWT 刷新令牌?

在 AngularJS 和 Nodejs 之间共享代码

使用 Laravel 和 Vue.js 分离前端和后端