SpringCloudGateWay和Sentinel結合做黑白名單來源控制

假設我們的分布式項目,admin是8087,gateway是8088,consumer是8086

我們一般的思路是我們的請求必須經過我們的網關8088然后網關轉發到我們的分布式項目,那我要是沒有處理我們繞過網關直接訪問項目8087和8086不也是可以?

所以我們會有個黑白名單來源控制來對這種特殊情況做處理

不用sentinel的做法

我們在網關那在轉發請求的時候+一個請求頭,請求頭的值固定

然后這個請求頭相當于密鑰我們不會對外暴露,然后在java代碼的攔截器中我們攔截請求判斷這個請求頭是否和配置一樣

優點:簡單

缺點:我們要是請求頭泄漏,我們發起請求的時候可以偽造請求頭這樣子我們仍然能跨網關訪問

用Sentinel的做法

sentinel+請求頭判斷來源做法

控制調用方

把我們的調用方分為白名單和黑名單

我們要的名稱其實是origin

RequestOriginParser接口

我們的sentinel是通過這個接口里的parseOrigin()這個方法,來獲取請求的來源的

這個方法的作用就是,從我們的request對象中解析出我們的origin的值

可惜,默認情況下這個方法返回的結果是default

如果不為空,那我們就把我們的origin作為請求頭返回

如果瀏覽器獲得的origin頭和網關獲取的請求頭不一樣,那他們的來源名稱就不一樣

這樣子我們就可以來編寫我們的規則了

區分請求是否經過網關

然后我們的網關有一個過濾器

請求頭的名字是origin,然后值是gateway


?

這樣我們從網關過來的就有請求頭,然后不是從網關過來的就沒有請求頭

之前如果我們知道正確的url,我們甚至可以繞過網關進行訪問,這樣子一點都不安全


實現步驟

連接RequestOriginParser接口

然后我們把它注冊成一個bean

為網關添加過濾器

看到沒,我們網關配置的請求頭的origin的值是gateway

總結

我們的sentinel是用這個方法來獲取我們的請求來源的

你看我們的返回值是String,我們就通過這個String來判斷我們的請求來源

我們默認請求頭有origin這個參數

因為我們配置從網關來的,我們的origin的參數時gateway

添加授權


我們剛剛的那個方法返回的參數,就是我們的來源的名稱

然后填寫我們的來源名稱

我們用8088端口繞過網關,發現不行


sentinel限制IP做法?

  • 在業務服務中配置 Sentinel 的 IP 限制規則,只允許網關的 IP 訪問。

  • 這種方式適用于網關和服務部署在同一內網環境的情況。

實現步驟

  1. 獲取網關的 IP

    • 假設網關的 IP 是?192.168.1.100

  2. 配置 Sentinel 規則

    • 在業務服務中配置 Sentinel 的白名單規則只允許網關的 IP 訪問。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

      import com.alibaba.csp.sentinel.slots.block.RuleConstant;
      import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule;
      import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRuleManager;
      import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;
      import java.util.Collections;@Configuration
      public class SentinelAuthorityRuleConfig {/*** 配置 Sentinel 的 IP 白名單規則*/@PostConstructpublic void initAuthorityRule() {// 創建 AuthorityRule 規則AuthorityRule rule = new AuthorityRule();rule.setResource("gateway_ip_whitelist"); // 資源名稱rule.setStrategy(RuleConstant.AUTHORITY_WHITE); // 白名單模式rule.setLimitApp("192.168.1.100"); // 只允許 Gateway 的 IP 訪問// 加載規則AuthorityRuleManager.loadRules(Collections.singletonList(rule));}
      }

3.業務服務層

  • 在業務服務中啟用 Sentinel 的流控功能,確保只有網關的請求可以通過

Gateway 的 IP

  • 情況說明:如果 Gateway 沒有進行特殊的配置來傳遞客戶端 IP 信息,那么后端服務接收到的請求中的 IP 地址通常是 Gateway 的 IP 地址。
  • 實現方式:這是比較常見的默認情況,例如一些簡單的網絡代理服務器在轉發請求時,如果沒有專門設置修改請求頭中的 IP 相關信息,后端服務器就只能看到代理服務器(即 Gateway)的 IP 地址,因為在網絡數據包傳輸過程中,源 IP 地址會被替換為 Gateway 的出口 IP 地址。

?如果我們要保留之前的客戶端請求的IP,我們要在Gateway做額外處理

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

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

相關文章

C#面試常考隨筆12:游戲開發中常用的設計模式【C#面試題(中級篇)補充】

C#面試題(中級篇),詳細講解,幫助你深刻理解,拒絕背話術!-CSDN博客 簡單工廠模式 優點: 根據條件有工廠類直接創建具體的產品 客戶端無需知道具體的對象名字,可以通過配置文件創建…

數字人|通過語音和圖片來創建高質量的視頻

簡介 arXiv上的計算機視覺領域論文: AniPortrait: Audio-Driven Synthesis of Photorealistic Portrait Animation AniPortrait:照片級真實感肖像動畫的音頻驅動合成 核心內容圍繞一種新的人像動畫合成框架展開。 研究內容 提出 AniPortrait 框架&a…

數據結構實戰之線性表(三)

目錄 1.順序表釋放 2.順序表增加空間 3.合并順序表 4.線性表之鏈表實現 1.項目結構以及初始代碼 2.初始化鏈表(不帶頭結點) 3.鏈表尾部插入數據并顯示 4.鏈表頭部插入數據 5.初始化鏈表(帶頭結點) 6.帶頭結點的鏈表頭部插入數據并顯示 7.帶頭結…

Docker使用指南(一)——鏡像相關操作詳解(實戰案例教學,適合小白跟學)

目錄 1.鏡像名的組成 2.鏡像操作相關命令 鏡像常用命令總結: 1. docker images 2. docker rmi 3. docker pull 4. docker push 5. docker save 6. docker load 7. docker tag 8. docker build 9. docker history 10. docker inspect 11. docker prune…

C++基礎day1

前言:謝謝阿秀,指路阿秀的學習筆記 一、基礎語法 1.構造和析構: 類的構造函數是一種特殊的函數,在創建一個新的對象時調用。類的析構函數也是一種特殊的函數,在刪除所創建的對象時調用。 構造順序:父類->子類 析…

嘗試ai生成figma設計

當聽到用ai 自動生成figma設計時,不免好奇這個是如何實現的。在查閱了不少資料后,有了一些想法。參考了:在figma上使用腳本自動生成色譜 這篇文章提供的主要思路是:可以通過腳本的方式構建figma設計。如果我們使用ai 生成figma腳本…

iOS 老項目適配 #Preview 預覽功能

前言 iOS 開發者 最憋屈的就是UI 布局慢,一直以來沒有實時預覽功能,雖然swiftUI 早就支持了,但是目前主流還是使用UIKit在布局,iOS 17 蘋果推出了 #Preview 可以支持UIKit 實時預覽,但是僅僅是 iOS 17,老項目怎么辦呢?于是就有了這篇 老項目適配 #Preview 預覽 的文章,…

【分布式架構理論2】分布式架構要處理的問題及解決方案

文章目錄 1. 應用服務拆分2. 分布式調用3. 分布式協同4. 分布式計算5. 分布式存儲6. 分布式資源管理與調度7. 高性能與可用性優化8. 指標與監控 將分布式架構需要解決的問題按照順序列舉為如下幾步 問題分類具體內容應用服務拆分分布式是用分散的服務和資源代替集中的服務和資…

【PyQt】pyqt小案例實現簡易文本編輯器

pyqt小案例實現簡易文本編輯器 分析 實現了一個簡單的文本編輯器,使用PyQt5框架構建。以下是代碼的主要功能和特點: 主窗口類 (MyWindow): 繼承自 QWidget 類。使用 .ui 文件加載用戶界面布局。設置窗口標題、狀態欄消息等。創建菜單欄及其子菜單項&…

Unity中的虛擬相機(Cinemachine)

Unity Cinemachine詳解 什么是Cinemachine Cinemachine是Unity官方推出的智能相機系統,它提供了一套完整的工具來創建復雜的相機運動和行為,而無需編寫大量代碼。它能夠大大簡化相機管理,提高游戲開發效率。 Cinemachine的主要組件 1. Vi…

【PyQt】getattr動態訪問對象的屬性

問題 使用qtdesigner設計好大體的軟件結構,需要使用代碼進行批量修改控件樣式,self.ui.x 會被解釋為訪問 self.ui 中名為 x 的屬性,而不是將 x 作為變量名來解析,此時需要通過字符串動態訪問 self.ui 中的按鈕對象 for i in range(20):x f…

【電腦系統】電腦突然(藍屏)卡死發出刺耳聲音

文章目錄 前言問題描述軟件解決方案嘗試硬件解決方案嘗試參考文獻 前言 在 更換硬盤 時遇到的問題,有時候只有卡死沒有藍屏 問題描述 更換硬盤后,電腦用一會就卡死,藍屏,顯示藍屏代碼 UNEXPECTED_STORE_EXCEPTION 軟件解決方案…

DEEPSEKK GPT等AI體的出現如何重構工廠數字化架構:從設備控制到ERP MES系統的全面優化

隨著深度學習(DeepSeek)、GPT等先進AI技術的出現,工廠的數字化架構正在經歷前所未有的變革。AI的強大處理能力、預測能力和自動化決策支持,將大幅度提升生產效率、設備管理、資源調度以及產品質量管理。本文將探討AI體&#xff08…

【大模型LLM面試合集】大語言模型架構_Transformer架構細節

Transformer架構細節 1.Transformer各個模塊的作用 (1)Encoder模塊 經典的Transformer架構中的Encoder模塊包含6個Encoder Block. 每個Encoder Block包含兩個?模塊, 分別是多頭?注意?層, 和前饋全連接層. 多頭?注意?層采?的是?種Scaled Dot-Pr…

【華為OD-E卷 - 113 跳格子2 100分(python、java、c++、js、c)】

【華為OD-E卷 - 跳格子2 100分(python、java、c、js、c)】 題目 小明和朋友玩跳格子游戲,有 n 個連續格子組成的圓圈,每個格子有不同的分數,小朋友可以選擇以任意格子起跳,但是不能跳連續的格子&#xff…

訂單狀態監控實戰:基于 SQL 的狀態機分析與異常檢測

目錄 1. 背景與問題 2. 數據準備 2.1 表結構設計 3. 場景分析與實現 3.1 場景 1:檢測非法狀態轉換

說一下JVM管理的常見參數

Java虛擬機&#xff08;JVM&#xff09;有許多常見參數&#xff0c;用于控制其行為和性能。以下是一些常見的JVM參數及其說明&#xff1a; 1. 內存管理參數 -Xms<size> START 設置初始堆內存大小。例如&#xff0c;-Xms512m表示初始堆大小為512MB。 -Xmx<size>…

驗證工具:GVIM和VIM

一、定義與關系 gVim&#xff1a;gVim是Vim的圖形界面版本&#xff0c;提供了更多的圖形化功能&#xff0c;如菜單欄、工具欄和鼠標支持。它使得Vim的使用更加直觀和方便&#xff0c;尤其對于不習慣命令行界面的用戶來說。Vim&#xff1a;Vim是一個在命令行界面下運行的文本編…

4 HBase 的高級 shell 管理命令

4 HBase 的高級 shell 管理命令 1.status 例如&#xff1a;顯示服務器狀態 hbase(main):058:0> status node012.whoami 顯示 HBase 當前用戶&#xff0c;例如&#xff1a; hbase> whoami3.list 顯示當前所有的表 hbase> list4.count 統計指定表的記錄數&#xff0c…

Web - CSS3基礎語法與盒模型

概述 這篇文章是關于 Web 前端 CSS3 的基礎語法與盒模型的講解。包括 CSS3 層疊性及處理沖突規則、偽元素和新增偽類元素、屬性選擇器等。還介紹了文本與字體屬性&#xff0c;如段落和行相關屬性、字體文本屬性。最后闡述了盒子模型&#xff0c;如元素隱藏、行內與塊元素轉換、…