一、报错原因
二、解决办法
在gateway包下新建一个config包,如图
在config包下新建一个类,名为GulimallCorsConfiguration
package com.atguigu.gulimall.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;
import java.util.Arrays;
@Configuration
public class GulimallCorsConfiguration{
@Bean
public CorsWebFilter corsWebFilter(){
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration= new CorsConfiguration();
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
//下面这是新版的Springboot3的使用方式,旧版用
//corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedOriginPattern("*");
corsConfiguration.setAllowCredentials(true);
source.registerCorsConfiguration("/**",corsConfiguration);
return new CorsWebFilter(source);
}
}
再将renren-fast项目里的CorsConfig类给注释掉
注释掉之后,最重要的一步来了
由于你可能是新版的springboot3,当初在创建gulimall-gateway模块的时候,系统会使用下面这个依赖给你创建的gateway网关,默认使用的是mvc。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway-mvc</artifactId>
</dependency>
这个是错误的,应该使用下面这个依赖。如果你是下面这个,就可以跳过这个环节
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
然后再将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}
最后重启renren-fast和gateway项目即可,注意nacos,虚拟机啥的都要启动,前端也要启动,而且前端的相关配置也是要跟这谷粒商城老师一样哦!
这样应该就解决问题了!
最后在提一点:renren-fast注册不到nacos上,不要依赖整个common,只依赖discover就可以了,但是版本要和renren-fast的springboot版本兼容,可以去下面这个网站上查找: