quarkus: 受CORS策略阻止

10
尽管我已经配置了属性文件,但仍然出现错误:
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.

我还创建了一个扩展ContainerRequestFilter的@Provider,但它从来没有到达那里。

application.properties

# Configuration file
quarkus.http.port=9090
quarkus.http.cors=true
quarkus.http.origins=http://localhost:4200, localhost:9090
quarkus.http.headers=accept, authorization, content-type, x-requested-with
quarkus.http.methods=GET, OPTIONS

编辑

17:11:09 WARN  [io.qu.config]] (build-3) Unrecognized configuration key "quarkus.http.methods" provided
17:11:09 WARN  [io.qu.config]] (build-3) Unrecognized configuration key "quarkus.http.headers" provided
17:11:09 WARN  [io.qu.config]] (build-3) Unrecognized configuration key "quarkus.http.origins" provided

嗨,看起来http.methods中缺少一些方法,你正在使用哪些方法GET/POST/PUT? - EliKnaffo
仅限使用 GET 方法访问这些服务。 - icarus
你能尝试在你的localhost:4200添加一个/*吗? - EliKnaffo
甚至使用 * 或空的配置行,也无法正常工作。 - icarus
2个回答

18
警告是一个很好的指示。
您的配置不正确。
应该是这样的:
quarkus.http.cors=true
quarkus.http.cors.origins=http://localhost:4200,http://localhost:9090
quarkus.http.cors.headers=accept, authorization, content-type, x-requested-with
quarkus.http.cors.methods=GET, OPTIONS

YAML 配置

quarkus:
  http:
    cors:
      ~: true
      origins: http://localhost:4200,http://localhost:9090
      headers: accept, authorization, content-type, x-requested-with
      methods: GET, OPTIONS, POST

使用 cors 前缀。

我们现在没有适当的文档,所以最好参考 https://github.com/quarkusio/quarkus/blob/master/extensions/undertow/runtime/src/main/java/io/quarkus/undertow/runtime/filters/CORSConfig.java

我打开了 https://github.com/quarkusio/quarkus/issues/3156 来追踪文档问题。


嗨Guillaume,是的,在g-groups/zulip中他们已经告诉我了,我纠正了所有错误并尝试了相同的结果。我的意思是,不再有警告,但我无法从我的Angular应用程序访问我的资源。 - icarus
CORS 过滤器的文档可以在这里找到:https://quarkus.io/guides/http-reference#cors-filter - Borislav Gizdov

2
尝试以下代码,这对我有效。
```html

尝试以下代码,这对我有效。

```
<code>
@Provider   
public class CorsFilter implements ContainerResponseFilter {
  @Override
  public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
    responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
    responseContext.getHeaders().add("Access-Control-Allow-Credentials", "true");
    responseContext.getHeade`enter code here`rs().add("Access-Control-Allow-Headers", "*");
    responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    responseContext.getHeaders().add("Access-Control-Max-Age", "100000");
  }
}
</code>

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接