1.在gulimall-gateway中创建一个Cros的配置类,进行跨域配置。
注意:springboot 2.4.0以前使用 addAllowedOrigin("*") 进行配置,在此版本之后使用addAllowedOriginPattern("*") 新的方法进行配置,使用之前的版本无法找到该方法。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsConfigurationSource;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.server.ServerWebExchange;
@Configuration
public class GulimallCorsConfiguration {
@Bean
public CorsWebFilter crosWebFilter(){
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 1. 配置跨域
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.setAllowCredentials(true);
source.registerCorsConfiguration("/** ",corsConfiguration);
return new CorsWebFilter(source);
}
}
3.创建了跨域的配置类之后,将renren-fast服务中的 CorsConfig配置类删除掉或者将该类中的方法注释掉即可,还需要在maven中将renren-fast进行clean和install,然后重启gulimall-gateway与renren-fast服务。
4.通过上述方法跨域问题还是没有解决,就需要在gulimall-gateway服务的yml配置文件中进行跨域的相关配置来进行解决,配置完成后重启服务。通过此方法也可解决跨域问题
spring:
cloud:
gateway:
routes:
- id: test_route
uri: https://www.baidu.com
predicates:
- Query=url,baidu
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url,qq
- id: admin_route
uri: lb://renren-fast
predicates:
- Path=/api/**
filters:
- RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}
globalcors:
cors-configurations:
'[/**]':
allowCredentials: true
allowedHeaders: "*"
allowedOrigins: "*"
allowedMethods: "*"
add-to-simple-url-handler-mapping: true