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

解决网关跨域问题

只需要在服务中添加以下配置代码就可以解决
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:8080,http://xxx.xxx.com:8080

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

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

你可能感兴趣的:(zuul网关和微服务之间跨域解决)