Spring Cloud Gateway是Spring公司基于Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。它的目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控和限流。
1.创建网关微服务
2.导入依赖
<!--gateway网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2.配置微服务
spring:
cloud:
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由
routes: # 路由数组[路由 就是指定当请求满足什么条件的时候转到哪个微服务]
- id: cloud-provider-payment # 当前路由的标识, 要求唯一
uri: lb://cloud-payment-service #nacos中的配置
#uri: http://localhost:8001 #实际路径
#order: 1 # 路由的优先级,数字越小级别越高
predicates: # 断言(就是路由转发要满足的条件)
#- Path=/payment/list/** # 当请求路径满足Path指定的规则时,才进行路由转发
#- After=2018-01-20T06:06:06+08:00[Asia/Shanghai] #这个时间以后生效
#- Cookie=username,mj #Cookie名必须为mj才能访问
- Header=X-Access-Token, #请求头中X-Access-Token部位空
#- Method=GET #只有GET方法能访问
#filters: # 过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改
#- StripPrefix=1 # 转发之前去掉1层路径
3.自定义过滤器
@Configuration
@Slf4j
public class MyGatewayFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("################ 全局Gateway 过滤器开始工作 ###############");
HttpHeaders headers = exchange.getRequest().getHeaders();
//需求操作
if (headers.containsKey("X-Access-Token")){
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}
4.启动类
@SpringBootApplication
@EnableEurekaClient
public class GatewayApplication3000 {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication3000.class,args);
}
}
注意:gateway微服务不需要引入web starter
网友评论