為什么需要網關?
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方案 并且只需要簡單的配置就能實作

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/507126.html
標籤:Java
上一篇:阿里云云效流水線自動部署配置
