java - 带有 Spring Boot 2 的 CORS
问题描述
我正在尝试将我的 Angular 应用程序连接到我的新 Spring Boot 2 控制器。我开始一切,我得到:
Access to XMLHttpRequest at 'localhost:8093/restapi/setup' from origin 'http://localhost:4200' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
其次是:
ERROR HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: "localhost:8093/restapi/setup", ok: false, …}
所以这是CORS,对吧?正如你所料,当我localhost:8093/restapi/setup
从邮递员那里打来时,我得到了有效的回应。
所以我做了一些研究,特别是我发现:No 'Access-Control-Allow-Origin' header is present on the requested resource—when trying to get data from a REST API
我终于在这里找到了这篇文章:
https://chariotsolutions.com/blog/post/angular-2-spring-boot-jwt-cors_part1/
这导致我得到以下代码:
@Configuration
public class ManageConfiguration {
private static final Logger LOGGER = LogManager.getLogger(ManageConfiguration.class);
@Bean
public CorsFilter corsFilter() {
LOGGER.debug("Configuring CORS");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("OPTIONS");
config.addAllowedMethod("GET");
config.addAllowedMethod("POST");
config.addAllowedMethod("PUT");
config.addAllowedMethod("DELETE");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
所以我认为这很简单,现在再试一次,我得到:
Access to XMLHttpRequest at 'localhost:8093/restapi/setup' from origin 'http://localhost:4200' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
其次是:
ERROR HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: "localhost:8093/restapi/setup", ok: false, …}
所以它似乎没有任何区别。
检查并在正确的端口上运行:
2019-02-27 14:23:21.261 INFO 9814 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8093 (http) with context path ''
确保它包括我的 CORS bean:
2019-02-27 14:23:19.608 DEBUG 9814 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Creating shared instance of singleton bean 'corsFilter'
...
o.springframework.web.filter.CorsFilter : Filter 'corsFilter' configured for use
Per如何使用 cURL 调试 CORS 请求?,我做了以下 curl 请求来查看我的飞行前的东西。
$ curl -H "Origin: http://example.com" --verbose http://localhost:8093/restapi/setup
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8093 (#0)
> GET /restapi/setup HTTP/1.1
> Host: localhost:8093
> User-Agent: curl/7.61.0
> Accept: */*
> Origin: http://example.com
>
< HTTP/1.1 200
< Vary: Origin
< Vary: Access-Control-Request-Method
< Vary: Access-Control-Request-Headers
< Access-Control-Allow-Origin: http://example.com
< Access-Control-Allow-Credentials: true
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Frame-Options: DENY
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Wed, 27 Feb 2019 21:38:28 GMT
<
* Connection #0 to host localhost left intact
{"issueType":["bug","epic","subTask","task","story"]}
一天来一直在为下一步要尝试什么而挠头,却什么也想不出来。建议?
解决方案
我认为您http://
在请求 URL 中发送没有协议前缀的 ajax 请求,请尝试http://localhost:8093/restapi/setup
从 ajax 中点击。
推荐阅读
- android - onAdFailedtoLoad: 3 错误仅适用于 AdMob 的 Android 版 Flutter 应用
- amazon-redshift - 在 Redshift 中重新创建表时访问被拒绝
- aws-sdk - 使用 micronaut-bom1.2.10、graal19.2.1 和 aws-sdk2.10.56 构建应用程序时出现错误:org.apache.commons.logging.LogFactoryjava.lang.NoClassDefFoundError
- amazon-web-services - 是否可以使用 .Net Core 2.2 在 AWS Lambda 上使用 Kinesis FireHose 执行 PutRecord?
- python - 更新 Google 表格而不覆盖现有的 google 表格
- reactjs - 渲染选项中的条件 [材质表]
- ansible - 如果启用了 ufw,如何运行 ansible 任务?
- python - 不使用小写或大写的不区分大小写的字符串比较
- jquery - 我如何捕捉菜单的第 8 个元素以在新选项卡中打开
- javascript - 如何小写对象中键的第一个字母?