Spring 当 运行 在 aws fargate 上但不是本地时,引导被 cors 阻止

Spring boot blocked by cors when running on aws fargate but not locally

这是我的第一个 post 如果我没有包含您需要帮助我的所有正确信息,请原谅我。

我创建了一个使用 spring 安全性的 spring 引导后端服务器 Rest API。当我通过我的 React 项目调用此 api 时,我最初收到 500 状态响应,告诉我该请求已被 CORS 阻止。我通过以下 corsConfig 文件解决了问题:

@Configuration
public class CorsConfig  {

    @Bean
    public WebMvcConfigurer corsConfigurer(){
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedMethods("GET", "POST", "PUT", "DELETE")
                        .allowedHeaders("*")
                        .allowedOrigins("*");
            }
        };
    }

}

当我 运行 React 项目 (localhost:3000) 和 spring api(localhost:8080) 时,一切 运行 都很好。我什至可以从 header 中看到 returns "Access-Control-Allow-Origin: *".

下面也是我的 spring 安全配置:

@Override
    protected void configure(HttpSecurity http) throws Exception {

        http.cors().and();
        http.csrf().disable().authorizeRequests()
                .antMatchers("/api/auth/**").permitAll()
                .anyRequest().authenticated()
        .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

        http.cors();
        http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
    }

我遇到的问题是我现在已经在 aws ecs fargate 上的 docker 容器 运行ning 上部署了我的 spring 启动 api,我现在再次获得 500 状态响应,我还可以看到 header“Access-Control-Allow-Origin: *”不再出现在响应中。

所以快速总结一下。在本地一切正常,只有当我调用我的后端 api 运行ning AWS 时才会出现问题。

我也尝试在我的 restController 上使用 @CrossOrigin(origins = "*") class。

我发现了类似的问题,但它们似乎都是在人们 运行 在本地安装他们的应用程序时出现的,并且已被我已经使用的解决方案修复。

在我看来,这个问题在某种程度上与 AWS 有关,但我不确定。 我希望有人能在这里为我指出正确的方向,如果我需要提供更多的截图,请告诉我。谢谢。

有时其他内部服务器错误隐藏在 CROS 后面,请尝试检查应用程序日志,如果可能,将它们重定向到 cloudWatch 日志。

我怀疑 Access-Control-Allow-Origin 是导致您的 500 错误的原因,它不是问题的主要来源,您的代码的其他部分导致了问题。