【GateWay】和權限驗證

【GateWay】網關詳解和權限驗證

  • 一、Gateway 核心概念與架構
  • 二、路由斷言(Route Predicates)詳解
  • 三、過濾器(Filters)機制
  • 四、權限認證的核心理論模型
  • 五、Spring Cloud Gateway + Security + OAuth2 集成方案
  • 六、OAuth2.0 集成

一、Gateway 核心概念與架構

Spring Cloud Gateway 是基于 Spring 5.0、Spring Boot 2.0 和 Project Reactor 構建的響應式 API 網關,核心功能包括:

  • 路由轉發:根據請求條件將請求轉發到不同微服務
  • 請求過濾:在請求或響應處理過程中添加自定義邏輯
  • 動態路由:結合服務注冊中心實現路由配置動態更新
  • 流量控制:支持限流、熔斷等服務保護機制

其架構基于 Reactor 響應式編程模型,采用非阻塞 IO,相比傳統阻塞式網關(如 Zuul 1.x)具有更高的并發處理能力。

二、路由斷言(Route Predicates)詳解

1. 路由斷言的本質
路由斷言是 Gateway 用于匹配請求的條件表達式,通過一組預定義的謂詞(Predicate)判斷請求是否符合路由規則。
每個路由至少包含一個斷言,當請求滿足所有斷言時,才會被轉發到目標服務。

2. 常用路由斷言謂詞

斷言類型作用描述配置示例
Path匹配請求路徑模式Path=/user-service/**
Method匹配 HTTP 請求方法(GET、POST 等)Method=GET
Header匹配請求頭中的參數Header=X-Request-Id, \d+
Query匹配請求參數Query=name, Jack
Cookie匹配請求 CookieCookie=JSESSIONID, [a-z0-9]+
Host匹配請求 Host 頭Host=**.example.com
RemoteAddr匹配客戶端IP 地址 RemoteAddr=192.168.1.1/24
TimeBetween匹配請求時間范圍TimeBetween=8:00-18:00
Weight權重路由(配合負載均衡)Weight=group1, 80

3. 斷言組合與優先級

  • 組合方式:多個斷言通過 AND 邏輯組合(需同時滿足),例如:
  • 優先級:路由配置的順序決定斷言匹配優先級,先匹配的路由優先處理
- Path=/api/user/** AND Method=GET

4. 自定義斷言
若需擴展斷言邏輯,可實現 GatewayPredicateFactory 接口,例如:

public class CustomPredicateFactory extends AbstractGatewayPredicateFactory<CustomPredicateFactory.Config> {public CustomPredicateFactory() {super(Config.class);}@Overridepublic GatewayPredicate apply(Config config) {return (exchange, chain) -> {// 自定義斷言邏輯(如請求參數校驗、用戶身份驗證等)return chain.filter(exchange);};}public static class Config {// 斷言配置參數}
}

三、過濾器(Filters)機制

1. 過濾器分類
Gateway 過濾器分為兩類:

  • 內置過濾器:Gateway 自帶的功能過濾器,覆蓋常見需求
  • 自定義過濾器:用戶根據業務需求自定義的過濾器

2. 核心內置過濾器

過濾器類型作用描述配置示例
RewritePath重寫請求路徑RewritePath=/api/(?.*), /${segment}
Retry請求重試機制Retry=3, BAD_GATEWAY, 1000
Hystrix集成 Hystrix 熔斷Hystrix=myCommand
RequestRateLimiter請求限流(基于 Redis)RequestRateLimiter=10, 20, 100
CircuitBreaker 熔斷處理(支持 Sentinel 等)CircuitBreaker=mybreaker
ResponseHeader修改響應頭ResponseHeader=X-Result, Success
RequestHeader修改請求頭RequestHeader=X-User, ${user}

3. 過濾器執行流程

  • Pre 過濾器:在請求轉發到目標服務前執行(如權限驗證、參數校驗)
  • Post 過濾器:在目標服務響應后執行(如結果轉換、響應頭添加)
  • 執行順序:過濾器按配置順序執行,可通過 order() 方法指定優先級

4. 自定義過濾器實現

@Component
public class AuthFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1. 從請求中獲取令牌String token = exchange.getRequest().getHeaders().getFirst("Authorization");// 2. 令牌驗證邏輯if (token == null || !validateToken(token)) {ServerHttpResponse response = exchange.getResponse();response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();}// 3. 驗證通過,放行請求return chain.filter(exchange);}@Overridepublic int getOrder() {return 0; // 過濾器優先級,數值越小優先級越高}private boolean validateToken(String token) {// 令牌驗證邏輯(可對接 OAuth2、JWT 等)return true;}
}

四、權限認證的核心理論模型

在微服務架構中,權限認證遵循 “認證(Authentication)+ 授權(Authorization)” 分離的原則:

  1. 認證(Authentication)
    驗證用戶身份的合法性,常見方式:
  • 用戶名 / 密碼
  • Token(如 JWT、OAuth2 Access Token)
  • 生物特征(指紋、人臉等)
  1. 授權(Authorization)
    驗證用戶是否有權限訪問特定資源,基于:
  • 角色(Role):如 ADMIN、USER
  • 權限(Permission):如 USER_CREATE、ORDER_VIEW
  • 屬性(Attribute):如用戶部門、地域
  1. OAuth2.0 協議模型
  • 資源所有者(Resource Owner):用戶
  • 客戶端(Client):前端應用或第三方服務
  • 授權服務器(Authorization Server):頒發令牌
  • 資源服務器(Resource Server):保護受保護資源
  1. JWT 令牌結構
    JWT 由三部分組成:

Header.Payload.Signature
頭部 . 有效載荷 . 簽名

  • Header:包含令牌類型和簽名算法
  • Payload:包含聲明(Claims),如用戶 ID、角色、過期時間
  • Signature:使用密鑰對 Header 和 Payload 簽名生成

五、Spring Cloud Gateway + Security + OAuth2 集成方案

┌─────────────────────────────────────────────────────────┐
│                    客戶端請求                             │
└───────────────────────┬─────────────────────────────────┘│▼
┌─────────────────────────────────────────────────────────┐
│                 Spring Cloud Gateway                     │
│  ┌─────────────────────────────────────────────────────┐│
│  │                   Security 過濾器鏈                   ││
│  │  ┌───────────┐  ┌───────────┐  ┌──────────────────┐ ││
│  │  │ 認證過濾器 │→│ 授權過濾器 │→│ OAuth2資源服務器過濾器 │ │
│  │  └───────────┘  └───────────┘  └──────────────────┘ ││
│  └─────────────────────────────────────────────────────┘│
└───────────────────────┬─────────────────────────────────┘│▼
┌─────────────────────────────────────────────────────────┐
│                 下游微服務集群                             │
└─────────────────────────────────────────────────────────┘

六、OAuth2.0 集成

1. OAuth2 授權模式選擇

模式適用場景安全性
授權碼模式 (Authorization Code)服務端應用(如 Web 應用)最高
簡化模式 (Implicit)前端應用(如 SPA)中等
密碼模式 (Resource Owner Password Credentials)受信任的第一方應用中等
客戶端模式 (Client Credentials)服務間調用

2. 資源服務器配置

spring:security:oauth2:resourceserver:jwt:issuer-uri: http://auth-server:8080  # 授權服務器URLjwk-set-uri: http://auth-server:8080/oauth2/jwks  # JWK集合URL

3. 令牌自省(Token Introspection)
當使用 opaque token(非 JWT)時,需配置令牌自省端點:

spring:security:oauth2:resourceserver:introspection-uri: http://auth-server:8080/oauth2/introspect  # 自省端點client-id: resource-server  # 資源服務器IDclient-secret: secret  # 資源服務器密鑰

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87576.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87576.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87576.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QSqlDatabase: QSQLITE driver not loaded

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言可能的原因解決辦法1. 確認 SQLite 驅動插件文件2. 拷貝插件文件到應用程序目錄3. 設置插件搜索路徑4. 安裝 SQLite 依賴庫5. 解決 QCoreApplication 實例問題 …

20250619在榮品的PRO-RK3566開發板的Android13下解決海羅光電有限公司HL070T58C-05屏在啟動的時候出現白色條紋的問題【時序】

20250619在榮品的PRO-RK3566開發板的Android13下解決海羅光電有限公司HL070T58C-05屏在啟動的時候出現白色條紋的問題 2025/6/19 20:39 緣起&#xff1a;榮品的PRO-RK3566開發板的Android13下&#xff0c;點亮海羅光電有限公司HL070T58C-05屏。 在啟動的時候會出現花屏/白色條紋…

docker使用Volume對Nginx進行掛載

需求&#xff1a; 需要將Nginx的歡迎頁面也就是index.html文件進行修改。 原始方法&#xff1a;由于docker會為每一個容器創建其對應的文件信息&#xff0c;但是創建的信息內容只有其最基礎的運行信息&#xff0c;所以想要直接去訪問其index.html就無法做到。 使用volume&am…

基于springboot的寵物服務預約系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了六年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…

idea 2025會在用戶目錄創建IdeaSnapshots文件夾

推薦一個api管理測試工具 一個簡單的API測試和編寫文檔的工具 idea 2025會在用戶目錄創建IdeaSnapshots文件夾 解決方案 打開 Profiler 點擊 setting 參考 https://youtrack.jetbrains.com/articles/SUPPORT-A-1086/How-to-change-or-turn-off-the-IdeaSnapshots-folder-…

【Mini-F5265-OB開發板試用測評】2、PWM驅動遙控車RX2接收解碼帶馬達驅動控制IC

手頭有帶轉向電機和動力電機小車底盤&#xff0c;買了很久一直在吃灰。 最近查了一下小車的驅動IC是富滿微的8D420L,是一款傳統的RX2接收解碼芯片&#xff0c;帶馬達驅動。 手頭沒有TX2發送芯片&#xff0c;所以考慮用MCU直接發送PWM直接接入RX2&#xff0c;可能可以驅動。 一…

Tcpdump網絡抓包工具詳解!

一、簡介 tcpdump就是&#xff1a;dump the traffic on a network&#xff0c;根據使用者的定義對網絡上的數據包進行截獲的包分析工具。 tcpdump是一個用于截取網絡分組&#xff0c;并輸出分組內容的工具。憑借強大的功能和靈活的截取策略&#xff0c;使其成為類UNIX系統下用…

Spring Boot的Security安全控制——應用SpringSecurity!

應用Spring Security 前面介紹了在項目開發時為什么選擇Spring Security&#xff0c;還介紹了它的原理。本節開始動手實踐Spring Security的相關技術。 實戰&#xff1a;Spring Security入門 現在開始搭建一個新項目&#xff0c;實踐一個Spring Security的入門程序。 &…

FPGA基礎 -- Verilog行為級建模之alawys語句

Verilog 中的 always 語句塊&#xff0c;這是行為級建模的核心結構之一&#xff0c;在 RTL 級設計中廣泛用于時序邏輯和組合邏輯的建模。 一、什么是 always 語句&#xff1f; ? 定義&#xff1a; always 語句用于描述可綜合的硬件行為邏輯&#xff0c;表示一個**“事件驅動…

【力扣 簡單 C】704. 二分查找

目錄 題目 解法一&#xff1a;二分查找 題目 解法一&#xff1a;二分查找 int find(const int* nums, int size, int target) {int left 0, right size - 1;while (left < right){int mid (left right) / 2;if (nums[mid] < target)left left 1;else if (nums[m…

Java并發編程實戰 Day 30:并發編程未來展望與最佳實踐總結

【Java并發編程實戰 Day 30】并發編程未來展望與最佳實踐總結 文章簡述 經過30天的系統學習&#xff0c;我們從Java并發編程的基礎知識逐步深入到高并發系統的架構設計與性能優化。本文作為“Java并發編程實戰”系列的收官之作&#xff0c;將全面回顧整個系列的核心內容&#…

量化面試綠皮書:23. 醉酒乘客

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。 23. 醉酒乘客 100名乘客排隊登機&#xff0c;每人持有一張對應座位的機票&#xff08;第n位乘客的座位號為n&#xff09;。 第一位乘客喝醉后…

AntV G6入門教程

以下教程聚焦于 AntV?G6 的 數據操作 API,詳細介紹各個方法的用途、參數以及完整的使用示例,幫助你在圖實例上精細地讀取、修改和管理節點/邊/組合等數據。文中示例代碼均基于 G6 v5.0.47 官方文檔 ([g6.antv.antgroup.com][1])。 一、獲取完整圖數據 1.1 graph.getData() …

67、數據訪問-crud實驗-分頁數據展示

67、數據訪問-crud實驗-分頁數據展示 分頁數據展示是數據訪問中常見的功能&#xff0c;用于將大量數據分割成多個頁面顯示&#xff0c;提升用戶體驗和系統性能。以下是分頁數據展示的相關介紹&#xff1a; #### 基本原理 1. **確定每頁顯示數量**&#xff1a;設定每頁顯示的數…

常見 Web 服務器

Web 服務器有很多種&#xff0c;功能和用途略有不同&#xff0c;下面我會分類介紹主流的 Web 服務器&#xff08;包含靜態/動態/反向代理支持&#xff09;并重點說明類似 Tomcat 的 Java 支持型。 常見 Web 服務器分類 類型名稱描述與特點&#x1f310; 靜態資源服務器Nginx高…

【MacOS】M3 Pro芯片MacBook極速搭建Kubernetes

M3 Pro 芯片 MacBook 2023上使用 Colima 安裝 Kubernetes。 Colima 輕量、高效&#xff0c;并且在 Apple Silicon 架構上表現出色。 下面是詳細的、一步一步的安裝和配置指南。 核心思路 我們將通過以下步驟完成整個過程&#xff1a; 準備工作: 安裝必要的工具&#xff0c;…

import { Add, Dongdong, UserAdd } from ‘@nutui/icons-react‘ 使用圖標導入庫報錯

import { Add } from "nutui/icons-react-taro"; 官網的導入的庫名字不全&#xff0c;后面要加-taro&#xff0c;就行了

猿人學js逆向比賽第一屆第七題

分析響應 看到響應體里面的data是個字體加密&#xff0c;于是這里可以看到woff文件也給返回了&#xff0c;這里現分析這個文件。 打開可以看到這里a351對應的是3和頁面中的3是對應的&#xff0c;于是用ddddocr動態識別字體文件中的字體&#xff0c;然后對應對應的字體替換是不…

股票心理學習篇:交易的人性弱點 - 頻繁交易

以下內容為學習時的筆記整理&#xff0c;視頻作者來自B站&#xff1a;老貓與指標 視頻鏈接&#xff1a;頻繁交易必死&#xff1f;底層邏輯深度剖析&#xff0c;老貓的的破局心法與實戰策略分享 交易的人性弱點 - 頻繁交易 主講人&#xff1a; 老貓 1. 引言&#xff1a;問題的…

WPF入門 #1 WPF布局基礎、WPF樣式基礎、WPF數據模板、WPF綁定

WPF當中有許多的布局容器控件&#xff0c;例如<Grid>、<StackPanel>、<WrapPanel>、<DockPanel>、<UniformGrid>。接下來分別介紹一下各個布局容器控件。 布局基礎 Grid <Grid><Grid.RowDefinitions><RowDefinition Height&qu…