GET 请求被 CORS 策略阻止

问题描述 投票:0回答:1

我已经在 AWS 上部署了一个全栈电子商务应用程序。此应用程序由一个 Angular 前端和一个公开某些 REST API 端点(例如产品和产品类别)的 Spring Boot 应用程序组成。

  • 我已经配置了后端,因此只有具有访问令牌的应用程序才能访问一个 API,特别是 Orders。

  • 在我的 Angular 前端中,我实现了一个拦截器,用于向 Orders API 请求添加访问令牌。

我的 REST API 和 Angular 应用程序都以 CloudFront 发行版为前端:

对于 REST API 分布式,我将 CORS 配置为允许来自所有来源的 GET 请求。

我访问 https://myshop.com 并单击订单链接,从而向订单 API 发出 GET 请求,以便我可以检索客户的订单,但没有列出任何订单。我检查 Dev Tools 控制台发现以下错误:

Access to XMLHttpRequest at 'https://myshopapi.com/api/orders' from origin 'https://myshop.com' 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.
GET https://myshopapi.com/api/orders net:: ERR_FAILED

问题是当 https://myshop.com 向我的其他 REST API 发送 GET 请求时,我没有遇到任何问题。我只在尝试访问 Orders API 时遇到这些错误。

我的Spring Security配置如下:

@Configuration
public class SecurityConfiguration {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

        // protect endpoint /api/orders
        http.authorizeRequests(configurer ->
                        configurer
                                .antMatchers("/api/orders/**")
                                .authenticated())
                .oauth2ResourceServer()
                .jwt();

        // add CORS filters
        http.cors();

        http.setSharedObject(ContentNegotiationStrategy.class,
                            new HeaderContentNegotiationStrategy());

        Okta.configureResourceServer401ResponseBody(http);

        http.csrf().disable();

        return http.build();
    }
}
angular amazon-web-services spring-security amazon-cloudfront
1个回答
0
投票

飞行前请求是

Options
不是
Get
您应该配置 CORS 以允许来自所有来源的
GET
Options
请求 见https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request

另请参阅为什么发送 OPTIONS 请求,我可以禁用它吗?

© www.soinside.com 2019 - 2024. All rights reserved.