如何在 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 项目中为电话号码身份验证创建 REST API?
如何从另一个新的 Spring Boot 项目调用一个 Spring Boot 项目中存在的 Spring Boot api