-
没有配置跨域,导致浏览器提示在A域名下不可以访问B域名的api,这样的错误很好解决,只需要在后端加入cors配置,就可以解决这类跨域问题,我们在springmvc的java配置中加入以下代码即可
package com.yonyou.threatIntelligence.cyber_threat_gateway.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.reactive.CorsWebFilter; import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource; /** * 跨域 */ @Configuration public class CyberPlatformConfiguration { @Bean public CorsWebFilter corsWebFilter(){ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration corsConfiguration = new CorsConfiguration(); // 配置跨域,允许任意请求头、请求方法、请求源的请求跨域 corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); corsConfiguration.addAllowedOrigin("*"); // 允许携带cookie跨域 corsConfiguration.setAllowCredentials(true); source.registerCorsConfiguration("/**", corsConfiguration); return new CorsWebFilter(source); } }
-
多值跨域问题
就是说Access-Control-Allow-Origin有两个值,但是浏览器只准许有一个值,所以报错。如下:
原因分析:
由于在 api gateway 和后端微服务都加入了cors,这样在返回的response中就加入了两个相同的跨域header,这样浏览器发现多个Access-Control-Allow-Origin于是就报错了。
解决办法:
将后端的cors跨域配置删除即可,只保留API gateway 项目的cors配置。
经测试如果删除网关的cors配置,保留后端微服务的cors配置还是不能访问。