Spring boot JS访问ZUUL背后的Spring REST服务被CORS政策阻止

Spring boot JS访问ZUUL背后的Spring REST服务被CORS政策阻止,spring-boot,microservices,spring-cloud,netflix-zuul,Spring Boot,Microservices,Spring Cloud,Netflix Zuul,我正在使用各种Spring云框架构建一个基于服务的小型平台。各组成部分如下: Eureka发现服务器 Spring配置服务器 身份验证服务器 Zuul网关服务器 休息服务 PostgreSQL服务器 在浏览器中运行的基于JQuery的简单客户端 (是的,这是基于曼宁的“弹簧微服务”中介绍的设计) 这一切在开发中都很好。然而,我最近将所有这些服务器端的东西部署到了一个外部服务器(运行docker compose),我无法再访问服务端点 通过JQuery调用服务端点时,出现以下错误: CORS策

我正在使用各种Spring云框架构建一个基于服务的小型平台。各组成部分如下:

  • Eureka发现服务器
  • Spring配置服务器
  • 身份验证服务器
  • Zuul网关服务器
  • 休息服务
  • PostgreSQL服务器
  • 在浏览器中运行的基于JQuery的简单客户端
(是的,这是基于曼宁的“弹簧微服务”中介绍的设计)

这一切在开发中都很好。然而,我最近将所有这些服务器端的东西部署到了一个外部服务器(运行docker compose),我无法再访问服务端点

通过JQuery调用服务端点时,出现以下错误:

CORS策略已阻止从源“”访问“”处的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源”标头

我已尝试将以下内容添加到Zuul服务器(在同一@EnableZuulProxy Spring启动应用程序类中):

@Bean
公共过滤器regsitionbean corsFilter(){
UrlBaseCorsConfiguration源=
新的UrlBasedCorsConfigurationSource();
CorsConfiguration配置=新的CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin(“*”);
config.addAllowedHeader(“*”);
config.addAllowedMethod(“*”);
source.registerCorsConfiguration(“*”,config);
FilterRegistrationBean=
新的FilterRegistrationBean(新的CorsFilter(源));
setOrder(有序的、最高的_优先级);
返回豆;
}
这产生了同样的错误


有什么想法吗?

在控制器中,您需要添加另一个带有@RestController/@Controller的注释

@交叉起源

像这样:

@Controller
@CrossOrigin(origins = "*", allowedHeaders = "*")
public class HomeController

试试这个。

好的,所以我通过从服务中删除所有Cors配置来修复它,并将其添加到Zuul网关

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {

        registry.addMapping("/**")
                .allowedMethods("POST", "PUT", "GET", "OPTIONS", "DELETE", "HEAD");
    }
}
它能工作,但我不知道为什么我以前的尝试不能(而且我显然讨厌在不了解如何工作的情况下修复某些东西)。所以如果有人有任何想法


干杯

恐怕不行。我试过了,在控制台中得到了完全相同的错误消息:(
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {

        registry.addMapping("/**")
                .allowedMethods("POST", "PUT", "GET", "OPTIONS", "DELETE", "HEAD");
    }
}