美文网首页
zuul网关和微服务之间跨域解决

zuul网关和微服务之间跨域解决

作者: echo不扣 | 来源:发表于2020-10-26 18:20 被阅读0次

解决网关跨域问题

只需要在服务中添加以下配置代码就可以解决
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CorsConfig {
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        return corsConfiguration;
    }

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }
}

或者在需要跨域的controller上使用注解:@CrossOrigin

如果使用的是网关则需要在网关中配置(网关配置完成后则不需要在独立的服务再次配置)
如果有特殊情况既需要在网关中配置,也需要在独立的服务中配置,就需要在网关的配置文件中加以下配置
zuul:
  ignoredServices: '*'
  sensitiveHeaders: Access-Control-Allow-Origin
  ignoredHeaders: Access-Control-Allow-Origin
如果不加这个配置服务就会报如下错误
 has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values 'http://xxx.com, *', but only one is allowed.

大概意思是 “标头配有多个值,但是只能允许一个”
因为网关访问微服务将response中的Access-Control-Allow-Origin:http://xxx.xxx.com:8080带了过去,就变成了
Access-Control-Allow-Origin:http://xxx.xxx.com:8080http://xxx.xxx.com:8080

原来用consul做注册中心的时候好像没有出现这个问题,所有服务都配了跨域;然后现在换成nacos就出现这个问题了,搞了好久以为是代码哪里搞得不对,没想到还有这种问题。

现在想再看看怎么找找为啥consul这么配置没有问题?

相关文章

网友评论

      本文标题:zuul网关和微服务之间跨域解决

      本文链接:https://www.haomeiwen.com/subject/osxzmktx.html