Springcloud GateWay網(wǎng)關(guān)配置過程圖解
一般為了不暴露自己的端口信息等,會選擇架構(gòu)一個網(wǎng)關(guān)在前面進行阻擋,起到保護的作用。附上一張工作示列圖。

1.配置網(wǎng)關(guān)9527
gateway作為網(wǎng)關(guān)需要和其他的應(yīng)用一樣需要注冊進eureka中進行管理,先創(chuàng)建應(yīng)用gateway9527
pom文件,關(guān)鍵是gateway依賴
<dependencies>
<dependency>
<groupId>com.bai</groupId>
<artifactId>cloud-api-common</artifactId>
<version>${project.version}</version>
</dependency>
<!--gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--熱部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
yml文件配置
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true # 開啟從注冊中心動態(tài)創(chuàng)建路由的功能,利用微服務(wù)名稱進行路由
routes:
- id: payment_route # 路由的id,沒有規(guī)定規(guī)則但要求唯一,建議配合服務(wù)名
#匹配后提供服務(wù)的路由地址
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/get/** # 斷言,路徑相匹配的進行路由
- id: payment_route2
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/sp/** #斷言,路徑相匹配的進行路由
eureka:
instance:
hostname: cloud-gateway-service
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
主啟動類正常配置
@SpringBootApplication
@EnableEurekaClient
public class GateWay9527 {
public static void main(String[] args) {
SpringApplication.run(GateWay9527.class,args);
}
}
2.配置路由兩種方式
1)yml文件格式(推薦)
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true # 開啟從注冊中心動態(tài)創(chuàng)建路由的功能,利用微服務(wù)名稱進行路由
routes:
- id: payment_route # 路由的id,沒有規(guī)定規(guī)則但要求唯一,建議配合服務(wù)名
#匹配后提供服務(wù)的路由地址
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/get/** # 斷言,路徑相匹配的進行路由
- id: payment_route2
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/sp/** #斷言,路徑相匹配的進行路由
- After=2020-11-09T11:09:52.794+08:00[Asia/Shanghai]
- Cookie=username,bai #帶Cookie,并且username的值為bai
# - Header=X-Request-Id,\d+ #請求頭要有 X-Request-Id屬性并且值為整數(shù)的正則表達式
2)通過config配置類實現(xiàn)
@Configuration
public class RouteConfig {
@Bean
public RouteLocator customerRoute(RouteLocatorBuilder builder){
RouteLocatorBuilder.Builder routes = builder.routes();
routes.route("payment_route1",
r -> r.path("/guonei").uri("http://news.baidu.com/guonei")).build();
return routes.build();
}
@Bean
public RouteLocator bokeRoute(RouteLocatorBuilder builder){
RouteLocatorBuilder.Builder routes = builder.routes();
routes.route("payment_route2",r->r.path("/boke").uri("http://www.cnblogs.com/lin530/")).build();
return routes.build();
}
}
3.斷言(Predicate)
相當于多種限制,只有通過驗證才能夠訪問到對應(yīng)的方法
- id: payment_route2
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/sp/** #斷言,路徑相匹配的進行路由
- After=2020-11-09T11:09:52.794+08:00[Asia/Shanghai]
- Cookie=username,bai #帶Cookie,并且username的值為bai
# - Header=X-Request-Id,\d+ #請求頭要有 X-Request-Id屬性并且值為整數(shù)的正則表達式
不同的方法可以配置不同的斷言,此處的斷言需要滿足路徑對,after時間后,cookie帶上正確的用戶名才可以訪問到,用cmd測試

其他還有很多斷言,請對照文檔自行研究
4)過濾(filter)
對訪問加上限制,通過驗證才可以訪問
新建過濾配置類
@Component
@Slf4j
public class GatewayGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("***time is :"+new Date());
String uname = exchange.getRequest().getQueryParams().getFirst("uname");
if(uname==null){
log.info("沒有用戶名,出現(xiàn)錯誤:o(╥﹏╥)o");
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
/*
設(shè)置過濾器優(yōu)先級,越小優(yōu)先級越大
*/
@Override
public int getOrder() {
return 0;
}
}
訪問方式帶上參數(shù),

本篇所有代碼均在GitHub:
https://github.com/MaTsukun/springcloud2020
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot集成spring cache緩存示例代碼
本篇文章主要介紹了springboot集成spring cache示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
springboot中將日志信息存儲在catalina.base中過程解析
這篇文章主要介紹了springboot中將日志信息存儲在catalina.base中過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09
Springboot使用redis實現(xiàn)接口Api限流的示例代碼
本文主要介紹了Springboot使用redis實現(xiàn)接口Api限流的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
springboot集成mybaits-generator自動生成代碼的流程分析
這篇文章主要介紹了springboot集成mybaits-generator自動生成代碼的流程分析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,感興趣的朋友一起看看吧2025-04-04
Spring Boot 集成 Quartz 使用Cron 表達式實現(xiàn)定
本文介紹了如何在SpringBoot項目中集成Quartz并使用Cron表達式進行任務(wù)調(diào)度,通過添加Quartz依賴、創(chuàng)建Quartz任務(wù)、配置任務(wù)調(diào)度以及啟動項目,可以實現(xiàn)定時任務(wù)的執(zhí)行,Cron表達式提供了靈活的任務(wù)調(diào)度方式,適用于各種復(fù)雜的定時任務(wù)需求,感興趣的朋友一起看看吧2025-03-03
SpringDataMongoDB多文檔事務(wù)的實現(xiàn)
mongodb4.0也出來一段時間了,這個版本最為大眾期待的特性就是支持了多文檔事務(wù)。這篇文章主要介紹了SpringDataMongoDB多文檔事務(wù)的實現(xiàn),感興趣的小伙伴們可以參考一下2018-11-11

