Gateway网关转发demo
2021-11-20 本文已影响0人
迦叶_金色的人生_荣耀而又辉煌
上一篇 <<<如何保证微服务接口的安全
下一篇 >>>Zuul的反向代理、过滤及动态网关配置实例
1.引入依赖包
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
</dependencies>
不要导入web包,要不然会报下列错误:
Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' that could not be found.
原因就是
因为SpringCloud gateway基于webflux实现的,不是基于SpringBoot-web,所以应该删除Springboot-web依赖组件。
2.bootstrap.yml新增配置
server:
###测试的时候,本地端口最好不要用80,容易出错
port: 9999
spring:
application:
name: test-gateway
cloud:
nacos:
discovery:
####开启以服务id去注册中心上获取转发地址
enabled: true
#注册发现使用nginx地址
server-addr: 10.211.55.16:9999
gateway:
routes:
###静态转发路由策略
- id: orderss
uri: http://www.baidu.com/
###匹配规则
predicates:
- Path=/baidu/**
###基于注册中心的路由策略
- id: member
#### 基于lb负载均衡形式转发,后面地址为注册中心的服务名称
uri: lb://member-service
filters:
#转发请求时去掉1级前缀,eg:http://localhost:9999/member/test?token=111中间的member字段会被清掉
- StripPrefix=1
###匹配规则
predicates:
- Path=/member/**
3.核心代码
启动下列就可以测试转发情况
@SpringBootApplication
public class GateWayApp {
public static void main(String[] args) {
SpringApplication.run(GateWayApp.class);
}
}
/**
* 读取头部信息,判断令牌是否存在,需要加入到容器中
*/
@Component
public class TokenFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getQueryParams().getFirst("token");
if (token == null || token.isEmpty()) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.BAD_REQUEST);
String msg = "token not is null ";
DataBuffer buffer = response.bufferFactory().wrap(msg.getBytes());
return response.writeWith(Mono.just(buffer));
}
return chain.filter(exchange);
}
推荐阅读:
<<<网关背景分类及常用框架
<<<微服务网关与过滤器的区别
<<<Nginx与Zuul的区别
<<<Zuul与Gateway有哪些区别
<<<Nginx与网关的区别
<<<如何保证微服务接口的安全
<<<Zuul的反向代理、过滤及动态网关配置实例
<<<Gateway高可用集群与动态网关
<<<Gateway的谓词配置实例
<<<Gateway配置及流程分析