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

1.配置網(wǎng)關(guān)9527
gateway作為網(wǎng)關(guān)需要和其他的應(yīng)用一樣需要注冊進(jìn)eureka中進(jìn)行管理,先創(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ù)名稱進(jìn)行路由
routes:
- id: payment_route # 路由的id,沒有規(guī)定規(guī)則但要求唯一,建議配合服務(wù)名
#匹配后提供服務(wù)的路由地址
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/get/** # 斷言,路徑相匹配的進(jìn)行路由
- id: payment_route2
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/sp/** #斷言,路徑相匹配的進(jìn)行路由
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ù)名稱進(jìn)行路由
routes:
- id: payment_route # 路由的id,沒有規(guī)定規(guī)則但要求唯一,建議配合服務(wù)名
#匹配后提供服務(wù)的路由地址
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/get/** # 斷言,路徑相匹配的進(jìn)行路由
- id: payment_route2
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/sp/** #斷言,路徑相匹配的進(jìn)行路由
- 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ù)的正則表達(dá)式
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)
相當(dāng)于多種限制,只有通過驗證才能夠訪問到對應(yīng)的方法
- id: payment_route2
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/sp/** #斷言,路徑相匹配的進(jìn)行路由
- 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ù)的正則表達(dá)式
不同的方法可以配置不同的斷言,此處的斷言需要滿足路徑對,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)文章
Java Socket一對多通信實現(xiàn)之并發(fā)處理方式
這篇文章主要介紹了Java Socket一對多通信實現(xiàn)之并發(fā)處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
JAVA發(fā)送HTTP請求,返回HTTP響應(yīng)內(nèi)容,應(yīng)用及實例代碼
這篇文章主要介紹了JAVA發(fā)送HTTP請求,返回HTTP響應(yīng)內(nèi)容,應(yīng)用及實例代碼,需要的朋友可以參考下2014-02-02
解決Intellij IDEA 使用Spring-boot-devTools無效的問題
下面小編就為大家?guī)硪黄鉀QIntellij IDEA 使用Spring-boot-devTools無效的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實現(xiàn)
這篇文章主要介紹了SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
一文搞懂接口參數(shù)簽名與驗簽(附含java python php版)
這篇文章主要為大家介紹了java python php不同版的接口參數(shù)簽名與驗簽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Spring的BeanFactoryPostProcessor接口示例代碼詳解
這篇文章主要介紹了Spring的BeanFactoryPostProcessor接口,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
Springboot如何利用攔截器攔截請求信息收集到日志詳解
一些系統(tǒng)經(jīng)常需要關(guān)注用戶請求的具體信息,如用戶信息、請求參數(shù)、響應(yīng)結(jié)果等等,在SpringBoot應(yīng)用中可通過攔截器的方式統(tǒng)一處理,下面這篇文章主要給大家介紹了關(guān)于Springboot如何利用攔截器攔截請求信息收集到日志的相關(guān)資料,需要的朋友可以參考下2021-08-08
Spring Boot 使用WebAsyncTask異步返回結(jié)果
這篇文章主要介紹了Spring Boot 使用WebAsyncTask異步返回結(jié)果的相關(guān)資料,需要的朋友可以參考下2018-02-02

