浏览器中的 CORS 起源错误(前端 Angular、后端 Quarkus)

Ash*_*osh 5 java angular quarkus

应用程序属性

#WEB
quarkus.tls.trust-all=true
quarkus.http.cors=true
Run Code Online (Sandbox Code Playgroud)

控制器

    @POST
    @Path("/result")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    @Operation(summary = "Show Even Result.", description = "This method will provide past Events result.")
    @Transactional
    public Response showEvenResult(@Valid EventResultRequest eventResultRequest) {
        log.info("BetSettlementController.users_result() :" + eventResultRequest);

        try {
            return Response.ok(resultService.usersBetsHistory(eventResultRequest)).build();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR). build();
        }

    }
Run Code Online (Sandbox Code Playgroud)

公开一个 API,该 API 在调用时提供一个包裹在响应对象周围的对象。从邮递员应用程序来看,它正在工作。但是当代码部署在“prod”环境上时,前端(Angular)在调用相同的 API 时会收到 CORS 错误。

浏览器控制台错误

从源“https://Front-end-URL”访问“https://Server-API-URL/events/result”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

A.C*_*ova 7

由于漏洞CVE-2022-4116,Quarkus已更新以防止该漏洞。从版本2.14.2.Final开始,您应该注意到某些 POST 和 PUT 方法可能会被拒绝并显示 403 错误代码。

我鼓励您正确配置应用程序的起源和标头,但如果您确实需要跳过它,您可以使用:

quarkus.http.cors=true
quarkus.http.cors.access-control-allow-credentials=true
quarkus.http.cors.origins=*
quarkus.http.cors.headers=Access-Control-Allow-Origin
Run Code Online (Sandbox Code Playgroud)

有关配置请参阅官方文档


Ale*_*iro 1

您application.properties显示您启用了 CORS,但它没有显示它启用的来源。你必须在某个地方指定这一点,即。您希望成为可供使用的 APIhttps://Front-end-URL

您可以通过在浏览器的开发工具中查找标头来检查浏览器中实际启用的Access-Control-Allow-Origin 来源