一、argparse簡介 argparse 是 python 自帶的命令行參數解析包,可以用來方便的服務命令行參數,使用之前需要先導入包 import argparse 二、簡單案例 簡單使用,創建一個名為test.py的文件 # 導入 argparse 模塊 import argparse # 創 ...
為什麼需要網關?
Gateway網關是我們服務的守門神,所有微服務的統一入口
網關的核心功能特性:
- 網關的功能:身份認證和許可權校驗
- 服務路由,負載均衡
- 請求限流
在SpringCloud中網關的實現包括兩種:
- geteway
- zuul
搭建網關服務
-
創建新的module(模塊),引入SpringCloudGateway的依賴和nacos的服務發現依賴:
-
編寫啟動類 :
package cn.itcast.gateway; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }
-
編寫路由配置及nacos地址
搭建網關服務:
總結:
網關搭建步驟:
-
創建項目,引入nacos服務發現和gateway依賴
-
配置application.yml,包括服務基本信息、nacos地址、路由
路由配置包括:
-
路由id:路由的唯一標示
-
路由目標(uri):路由的目標地址,http代表固定地址,lb代表根據服務名負載均衡
-
路由斷言(predicates):判斷路由的規則,
-
路由過濾器(filters):對請求或響應做處理
路由斷言工廠:
路由過濾器 GatewayFilter:
還有一個配置 filters :路由過濾器:對請求或響應做處理
會先經過過濾器 Spring提供了31種不同的過濾器工廠
預設過濾器 default-filters 會對所有的路由請求都生效
全局過濾器 GlobaFilter:
exchange 請求上下文 從請求進入開始一直到結束為止 可以拿到請求相關的信息,響應相關的信息 甚至 存東西和取東西也是可以的
chain 過濾器鏈 放行用的 交給下一個過濾器
自定義一個全局過濾器:
-
參數中是否有token,
-
token參數值是否為admin
如果同時滿足則放行,否則攔截
@Component
@Order(1)
public class AuthorizeFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 1.獲取請求參數
ServerHttpRequest request = exchange.getRequest();
MultiValueMap<String, String> params = request.getQueryParams();
// 2.獲取參數中的authorization參數
String auth = params.getFirst("token");
// 3.判斷參數值是否等於admin
if ("admin".equals(auth)) {
// 4.是 放行
return chain.filter(exchange);
}
// 5.否 攔截
// 設置狀態碼
exchange.getResponse().setStatusCode(
HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
}
-
全局過濾器的作用是什麼:
對所有路由都生效的過濾器,並且可以自定義處理邏輯
-
實現全局過濾器的步驟:
- 實現GlobalFilter介面
- 添加@order註解或者實現Ordered介面 數值越小 優先順序越高
- 編寫處理邏輯
過濾器執行順序:
- 當過濾器的order值一樣,會按照defaultFilter > 路由過濾器 > GlobalFilter的順序執行
跨域問題處理:
域的組成:協議,ip,埠
- 同域:協議,ip,埠 都相同
- 跨域:協議,ip,埠 有一個不同
網管跨域處理的方法 CORS方案 並且只需要簡單的配置就能實現