上一篇 <<<如何保證微服務(wù)接口的安全
下一篇 >>>Zuul的反向代理敬锐、過濾及動(dòng)態(tài)網(wǎng)關(guān)配置實(shí)例
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>
不要導(dǎo)入web包,要不然會(huì)報(bào)下列錯(cuò)誤:
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.
原因就是
因?yàn)镾pringCloud gateway基于webflux實(shí)現(xiàn)的纵竖,不是基于SpringBoot-web彩匕,所以應(yīng)該刪除Springboot-web依賴組件腔剂。
2.bootstrap.yml新增配置
server:
###測試的時(shí)候,本地端口最好不要用80驼仪,容易出錯(cuò)
port: 9999
spring:
application:
name: test-gateway
cloud:
nacos:
discovery:
####開啟以服務(wù)id去注冊中心上獲取轉(zhuǎn)發(fā)地址
enabled: true
#注冊發(fā)現(xiàn)使用nginx地址
server-addr: 10.211.55.16:9999
gateway:
routes:
###靜態(tài)轉(zhuǎn)發(fā)路由策略
- id: orderss
uri: http://www.baidu.com/
###匹配規(guī)則
predicates:
- Path=/baidu/**
###基于注冊中心的路由策略
- id: member
#### 基于lb負(fù)載均衡形式轉(zhuǎn)發(fā)掸犬,后面地址為注冊中心的服務(wù)名稱
uri: lb://member-service
filters:
#轉(zhuǎn)發(fā)請求時(shí)去掉1級(jí)前綴袜漩,eg:http://localhost:9999/member/test?token=111中間的member字段會(huì)被清掉
- StripPrefix=1
###匹配規(guī)則
predicates:
- Path=/member/**
3.核心代碼
啟動(dòng)下列就可以測試轉(zhuǎn)發(fā)情況
@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);
}
推薦閱讀:
<<<網(wǎng)關(guān)背景分類及常用框架
<<<微服務(wù)網(wǎng)關(guān)與過濾器的區(qū)別
<<<Nginx與Zuul的區(qū)別
<<<Zuul與Gateway有哪些區(qū)別
<<<Nginx與網(wǎng)關(guān)的區(qū)別
<<<如何保證微服務(wù)接口的安全
<<<Zuul的反向代理宙攻、過濾及動(dòng)態(tài)網(wǎng)關(guān)配置實(shí)例
<<<Gateway高可用集群與動(dòng)態(tài)網(wǎng)關(guān)
<<<Gateway的謂詞配置實(shí)例
<<<Gateway配置及流程分析