文章目录
1.创建gateway工程
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=21d19a7e32d74b4d8883ca74300011eb.png?,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASSdtIHRoZSBiZXN0,size_20,color_FFFFFF,t_70,g_se,x_16)
2.引入pom文件
因为我使用的是spring2.2.2版本,cloud使用的Hoxton.SR9
cloud因为版本过高导致jar包冲突,我就降低了cloud的版本为Hoxton.RELEASE(完整的pom文件可以去我的github上看)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
3.注册进入nacos
- 引入pom文件
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
- 修改配置
4.添加路由规则
- 增加bootstrap配置文件夹
spring:
server:
port: 80
application:
name: hz-gateway
cloud:
nacos:
discovery:
server-addr: 192.168.1.202:8848
gateway:
discovery:
locator:
enabled: true # 是否开启负载均衡策略
routes:
# system
- id: system
uri: lb://hz-system
# 断言
predicates:
- Path=/system/**
# 过滤
filters:
# 剥离一级路径
- StripPrefix=1
5.过滤器的使用
继承GlobalFilter然后实现filter方法
@Component
public class GatewayFilter implements GlobalFilter {
// 白名单,用于跳过某些请求
private static final String[] whiteList = {
"/system/config"
};
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String url = exchange.getRequest().getURI().getPath();
System.out.println("网关:" + url);
// 这里可以用来做用户登录验证
// 跳过不需要验证的路径
if (Arrays.asList(whiteList).contains(url)) {
// 传递给下一个过滤器
return chain.filter(exchange);
}
return chain.filter(exchange);
// throw new RuntimeException("鉴权错误");
}
}