1. 程式人生 > 程式設計 >Springcloud GateWay閘道器配置過程圖解

Springcloud GateWay閘道器配置過程圖解

一般為了不暴露自己的埠資訊等,會選擇架構一個閘道器在前面進行阻擋,起到保護的作用。附上一張工作示列圖。

Springcloud GateWay閘道器配置過程圖解

1.配置閘道器9527

gateway作為閘道器需要和其他的應用一樣需要註冊進eureka中進行管理,先建立應用gateway9527

pom檔案,關鍵是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 # 開啟從註冊中心動態建立路由的功能,利用微服務名稱進行路由
   routes:
    - id: payment_route # 路由的id,沒有規定規則但要求唯一,建議配合服務名
     #匹配後提供服務的路由地址
     #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 # 開啟從註冊中心動態建立路由的功能,利用微服務名稱進行路由
   routes:
    - id: payment_route # 路由的id,路徑相匹配的進行路由
      - 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屬性並且值為整數的正則表示式

2)通過config配置類實現

@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)

相當於多種限制,只有通過驗證才能夠訪問到對應的方法

- id: payment_route2
     #uri: http://localhost:8001
     uri: lb://cloud-payment-service
     predicates:
      - Path=/payment/sp/** #斷言,\d+ #請求頭要有 X-Request-Id屬性並且值為整數的正則表示式

不同的方法可以配置不同的斷言,此處的斷言需要滿足路徑對,after時間後,cookie帶上正確的使用者名稱才可以訪問到,用cmd測試

Springcloud GateWay閘道器配置過程圖解

其他還有很多斷言,請對照文件自行研究

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("沒有使用者名稱,出現錯誤:o(╥﹏╥)o");
      exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
      return exchange.getResponse().setComplete();
    }
    return chain.filter(exchange);
  }

  /*
  設定過濾器優先順序,越小優先順序越大
   */
  @Override
  public int getOrder() {
    return 0;
  }
}

訪問方式帶上引數,

Springcloud GateWay閘道器配置過程圖解

本篇所有程式碼均在GitHub:

https://github.com/MaTsukun/springcloud2020

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。