【问题标题】:CORS Policy error during POST Call from Angular frontend to Spring backend [duplicate]从Angular前端到Spring后端的POST调用期间出现CORS策略错误[重复]
【发布时间】:2021-06-20 06:29:55
【问题描述】:

我试图在我的 Angular 前端和 Java / Spring 中的 REST 端点之间建立连接(我没有开发,也不太了解)。通过 GET,一切正常。通过 POST,我在终端收到消息

已被 CORS 政策阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

并且,在开发工具的“网络”选项卡中,OPTIONS 方法出现错误 403

Request Method: OPTIONS
Status Code: 403 
Remote Address: xx.xx.xx.xx:xxxx
Referrer Policy: strict-origin-when-cross-origin

所以,我在互联网上多次搜索后发现了这种情况,原因是 CORS 设置:通常,在这种情况下,在 POST 之前发送 OPTIONS 调用;但是,由于 CORS,不允许调用 OPTIONS。所以,我试图在我的控制器上设置这一行

@CrossOrigin(origins = "*", methods = {RequestMethod.OPTIONS, RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE})

这次错误发生了变化

Multiple CORS header 'Access-Control-Allow-Origin' not allowed

但是我添加的代码是唯一与@CrossOrigin相似的,我没有发现其他类似的。

所以,我的问题是:我可以在控制器或其他类中搜索哪些代码,这些代码通常与上述装饰器具有相同的作用?

(该应用程序使用 Spring Security;我没有开发它,而且我对 Spring Security 不是很专业)。

编辑

我在这个讨论中所做的完全是(与我的不完全相似)但是,在这种情况下,我收到了这个新错误:

已被 CORS 策略阻止:“Access-Control-Allow-Origin”标头包含多个值“*、*”,但只允许一个。

我能做什么?

【问题讨论】:

标签: java angularjs spring spring-security


【解决方案1】:

在您的 Spring Boot 项目中,将以下代码添加到您的控制器中。

@CrossOrigin(allowedHeaders =
    {"Orgin", "X-Requested-With", "Content-Type", "Accept", "Authorization"},
    methods = {RequestMethod.POST, RequestMethod.GET, RequestMethod.PUT, 
    RequestMethod.DELETE}
 )

如果您的服务在本地服务器/任何具有任何代理的服务器上运行,这将解决您的跨域问题。

【讨论】:

  • 谢谢,但问题不在于这个!问题是,如果我这样做,我会收到消息“不允许使用多个 CORS 标头 'Access-Control-Allow-Origin'”。请阅读我帖子的最后一部分,直到最后。非常感谢您的帮助!
  • @Archimede 他的回答并不完整,但至少它告诉你,你必须删除 RequestMethod.OPTIONS 才能摆脱错误 Multiple CORS header 'Access-Control-Allow-来源'不允许.
【解决方案2】:

您可以添加全局策略以允许访问实现 WebMvcConfigurer。

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
        .allowedMethods("*")
        .allowedOrigins("*")
        .allowedHeaders("*");
}

}

【讨论】:

  • 谢谢,但问题不在于这个!问题是,如果我这样做,我会收到消息“不允许使用多个 CORS 标头 'Access-Control-Allow-Origin'”。请阅读我帖子的最后一部分,直到最后。非常感谢您的帮助!
  • 您的解决方案不起作用,因为调度程序 servlet 在 Spring Security 过滤器链之后执行。预检请求永远不会到达调度程序 servlet。
猜你喜欢
  • 2019-06-11
  • 2020-11-05
  • 2021-10-16
  • 2019-09-04
  • 1970-01-01
  • 2020-05-02
  • 2017-12-01
  • 2022-12-11
  • 2020-04-03
相关资源
最近更新 更多