邮寄呼叫的CORS请求无效?

时间:2018-11-14 11:10:15

标签: java spring spring-boot netflix-zuul

Request URL: ******
Request Method: OPTIONS
Status Code: 403 
Remote Address: ****
Referrer Policy: no-referrer-when-downgrade

对于邮递浏览器,将其显示为“选项”。

以下是服务器代码:

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            System.out.println("onboard cors");

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

当我直接调用相应的服务时,上面的代码工作正常。

但是通过zuul api网关调用服务会收到“无效的cors请求”错误。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您的浏览器首先检查POST方法是否可以安全发送到端点,如果可以,则发出POST请求。您应该提供对OPTIONS方法的权限,并使用Allow: GET, HEAD, POST进行响应,并且一切正常。我在使用Python时遇到了这个问题,所以这全都与CORS有关,而与平台无关。

查看有关它的更多信息here

答案 1 :(得分:0)

以下解决方案对我有用。

在zuul项目中添加以下代码:

@Bean
public FilterRegistrationBean corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");
    config.addAllowedMethod("*");
    source.registerCorsConfiguration("/**", config);
    FilterRegistrationBean bean = new FilterRegistrationBean(new org.springframework.web.filter.CorsFilter(source));
    bean.setOrder(0);
    return bean;
}

不需要在所有微服务中添加corsfilter代码。

参考:https://stackoverflow.com/a/46277194/4132466