如何在 Spring Boot API 中停用 CORS(版本 2.2.6)

Posted

技术标签:

【中文标题】如何在 Spring Boot API 中停用 CORS(版本 2.2.6)【英文标题】:How deactivate CORS in a Spring Boot API (Version 2.2.6) 【发布时间】:2021-12-29 08:07:10 【问题描述】:

我目前正在使用现有的 Spring Boot 后端开发 React 前端。

在本地开发时,我遇到了典型的 CORS 错误:

Access to fetch at 'http://localhost:8180/api/data/firms' from
origin 'https://localhost:8087' has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
If an opaque response serves your needs, 
set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

runtime.js:98 GET http://localhost:8180/api/data/firms net::ERR_FAILED

我已经尝试了post 中提到的大多数解决方案,但是没有任何帮助。通过添加这些 sn-ps 之一

@Override
    protected void configure(HttpSecurity http) throws Exception 
        http.cors().configurationSource(request -> new CorsConfiguration().applyPermitDefaultValues());
    
@Bean
  public FilterRegistrationBean<CorsFilter> corsFilterRegistrationBean() 
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
    FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
    bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
    return bean;
  

或创建 CorsFilter,CORS 错误消失了,但现在 API 总是返回 HTTP 500 错误。

有人知道我的问题的解决方案吗?

【问题讨论】:

【参考方案1】:

您可以在控制器类中添加它。

@CrossOrigin(origins = "$cross.origin")
@RestController

application.properties

cross.origin=https://localhost:8087

【讨论】:

【参考方案2】:

我为 Spring Boot 添加了new answer。

此外,如果您使用create-react-app,您将避免对set up proxy 的CORS 问题。 (在这种情况下,不需要更改 Spring Boot 设置。)

package.json:

  "proxy": "http://localhost:8180",

【讨论】:

以上是关于如何在 Spring Boot API 中停用 CORS(版本 2.2.6)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中收听流式 API?

如何在 Spring-Boot 项目中为电话号码身份验证创建 REST API?

×××公众号接入基本配置服务器配置 spring boot

如何从另一个新的 Spring Boot 项目调用一个 Spring Boot 项目中存在的 Spring Boot api

如何使用Azure AD B2C保护Spring Boot REST API?

如何在Spring Boot中测试对外部api的调用