Sentinel 授權規則詳解與自定義異常處理

Sentinel 授權規則詳解與自定義異常處理

在微服務系統中,權限控制和訪問保護是至關重要的一環。本文將詳細介紹如何通過 Sentinel 的 授權規則(AuthorityRule) 控制資源訪問權限,并結合實際案例說明如何設置白名單與黑名單,以及如何實現 自定義異常返回,提升系統的穩定性與用戶體驗。


一、Sentinel 授權規則

授權規則用于對資源進行訪問權限控制,其核心思想是:
給指定資源配置“流控應用”,然后通過 白名單黑名單 控制不同來源是否能訪問。

  • 白名單(Whitelist):只有在白名單中的應用可以訪問。
  • 黑名單(Blacklist):黑名單中的應用不能訪問,其他應用可以正常訪問。

如何設置請求來源(流控應用)?

Sentinel 默認不識別請求的來源,我們需要自定義 RequestOriginParser 接口來識別請求參數,從而指定來源。

自定義來源解析器
package com.southwind.configuration;import com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser;
import org.springframework.util.StringUtils;import javax.servlet.http.HttpServletRequest;public class RequestOriginParserDefinition implements RequestOriginParser {@Overridepublic String parseOrigin(HttpServletRequest request) {String name = request.getParameter("name");if (StringUtils.isEmpty(name)) {throw new RuntimeException("name is null");}return name;}
}
注入配置類使其生效
package com.southwind.configuration;import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager;
import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;@Configuration
public class SentinelConfiguration {@PostConstructpublic void init() {WebCallbackManager.setRequestOriginParser(new RequestOriginParserDefinition());}
}

二、授權規則效果展示

示例:假設我們對接口 /test 添加授權規則,限制訪問來源。

白名單效果

配置白名單為 aaa,那么只有 name=aaa 的請求能通過:

http://localhost:8080/test?name=aaa

其他任何非 aaa 的請求都將被攔截。

(示意圖:白名單正常訪問請求截圖)


黑名單效果

配置黑名單為 tom,表示禁止 name=tom 的請求:

http://localhost:8080/test?name=tom

其它名稱的請求如 name=jerry 可以正常訪問。

(示意圖:黑名單攔截請求截圖)


三、自定義規則異常處理

當請求被 Sentinel 攔截(如限流、降級、授權失敗等),可以通過 UrlBlockHandler 接口進行統一異常處理,返回更加友好的信息。

創建自定義異常處理器
package com.southwind.handler;import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlBlockHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowException;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class ExceptionHandler implements UrlBlockHandler {@Overridepublic void blocked(HttpServletRequest request, HttpServletResponse response, BlockException e) throws IOException {response.setContentType("text/html;charset=utf-8");String msg = "訪問受限:";if (e instanceof FlowException) {msg += "觸發限流";} else if (e instanceof DegradeException) {msg += "觸發降級";}response.getWriter().write(msg);}
}
在配置類中注冊異常處理器
@Configuration
public class SentinelConfiguration {@PostConstructpublic void init() {WebCallbackManager.setUrlBlockHandler(new ExceptionHandler());}
}

四、總結

功能模塊說明
授權規則通過白名單/黑名單控制來源訪問權限
請求來源設置實現 RequestOriginParser 指定來源參數
自定義異常實現 UrlBlockHandler 提供更友好提示
配置生效@Configuration 中注入配置

通過上述配置,我們不僅實現了資源訪問控制,還優化了 Sentinel 異常返回信息,讓系統既安全又具備良好的用戶體驗。


參考資料:

  • Sentinel 官網:https://github.com/alibaba/Sentinel
  • Spring Boot + Sentinel 實踐示例

如覺得有幫助,歡迎點贊、收藏、評論支持!
更多后端開發實踐內容持續更新中。

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

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

相關文章

LeetCode Hot 100 最大子數組和

給你一個整數數組 nums ,請你找出一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。 子數組是數組中的一個連續部分。 示例 1: 輸入:nums [-2,1,-3,4,-1,2,1,-5,4] 輸出:6…

Python UI自動化演進格局:從傳統庫到AI驅動的智能代理

引言 UI自動化的持久需求 在現代軟件工程和業務流程管理中,圖形用戶界面(GUI)自動化扮演著至關重要的角色。它不僅僅局限于軟件測試領域,更是機器人流程自動化(RPA)、自動化數據錄入、遺留系統集成以及在AP…

【Java面試】如何解決MQ死信隊列?

如何解決MQ死信隊列? 一、預防死信產生(從源頭減少死信) 消費者端健壯性優化 捕獲所有可能的異常,區分可恢復異常(如網絡超時)和不可恢復異常(如數據格式錯誤)。對可恢復異常實現自…

RGB+EVS視覺融合相機:事件相機的革命性突破?

一、單一EVS事件相機的原理 事件相機(EVS)是一種新型的視覺傳感器,其設計靈感來源于生物視覺系統。與傳統相機不同,事件相機并不以固定的幀率捕獲整個圖像,而是每個像素獨立工作,當檢測到亮度變化超過預設…

DBeaver 設置阿里云中央倉庫地址的操作步驟

DBeaver 設置阿里云中央倉庫地址的操作步驟(適用于解決驅動下載緩慢或失敗的問題) 一、最新阿里云 Maven 倉庫地址 主倉庫地址(推薦): http://maven.aliyun.com/nexus/content/groups/public/ 123 備用地址&#xff…

Qt:QCustomPlot庫的QCPAxis

在 QCustomPlot 中,QCPAxis 是圖表坐標系的核心組件,負責管理坐標軸的所有視覺和功能特性。它提供了豐富的定制選項,使開發者能夠創建高度專業化的數據可視化圖表。 核心功能概述 功能類別關鍵特性相關方法基本結構坐標軸位置、方向axisTyp…

七天學會SpringCloud分布式微服務——05——OpenFeign

1、OpenFeign實現遠程調用 1.1 services.pom引入依賴 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>1.2 在service-order微服務中新建feign.Product…

大語言模型的通用局限性與全球技術演進

基于行業最新數據修訂&#xff08;2025Q2&#xff09; 一、知識截止期&#xff1a;全球模型的進化差異 所有LLM都存在??知識截止期&#xff08;Knowledge Cut-off&#xff09;??&#xff0c;即模型訓練數據的時間上限。這在技術迭代飛快的軟件開發領域尤為致命——2023年后…

常見網絡安全威脅和防御措施

網絡安全威脅是一種技術風險&#xff0c;會削弱企業網絡的防御能力&#xff0c;危及專有數據、關鍵應用程序和整個 IT 基礎設施。由于企業面臨廣泛的威脅&#xff0c;因此他們應該仔細監控和緩解最關鍵的威脅和漏洞。網絡安全問題有七大類&#xff0c;它們都包括多種威脅&#…

人工智能和云計算對金融未來的影響

你有沒有想過&#xff0c;你的錢是否會由人工智能而不是銀行來管理&#xff1f;如果你的銀行不存在于真實的地方&#xff0c;而是存在于幾千公里之外的某臺大型超級計算機上&#xff0c;那會怎樣&#xff1f;這可能有一天會發生&#xff0c;讓我們看看它是如何發生的&#xff0…

Vue3——項目配置eslint+prettier

一、安裝依賴 pnpm add -D eslint prettier eslint-plugin-vue vue-eslint-parser typescript-eslint/eslint-plugin typescript-eslint/parser eslint-config-prettier eslint-plugin-prettier typescript-eslint二、創建或修改 eslint.config.cjs // eslint.config.cjs con…

人工智能編程三大核心流程詳解--機器學習、神經網絡、NLP自然語言處理

對于學習人工智能階段&#xff0c;代碼可以寫出來&#xff0c;主要是按照構建流程一步一步&#xff0c;所以本篇博客主要是通過三個大點來介紹&#xff1a;第一個點是機器學習中預測損失值與真實值之間的誤差流程&#xff1b;第二點是深度學習中神經網絡搭建流程&#xff1b;第…

《AI for Science:深度學習如何重構基礎科學的發現范式?》

前言 前些天發現了一個巨牛的人工智能免費學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站 AI for Science&#xff1a;深度學習如何重構基礎科學的發現范式&#xff1f; 副標題&#xff1a;從費曼圖到神經微分方程&…

創客匠人:創始人 IP 打造引領知識變現新路徑?

在當下知識經濟蓬勃發展的時代&#xff0c;知識變現已成為眾多創作者和從業者關注的焦點。創客匠人作為行業內的重要參與者&#xff0c;為創始人 IP 打造與知識變現提供了獨特且有效的思路。? 創始人 IP 打造在知識變現中占據著關鍵地位。創客匠人認為&#xff0c;一個成功的…

JVM調優實戰 Day 7:JVM線程分析與死鎖排查

【JVM調優實戰 Day 7】JVM線程分析與死鎖排查 文章標簽 jvm調優, 線程分析, 死鎖排查, JVM監控, Java性能優化, JVM參數配置 文章簡述 在Java應用的高并發場景中&#xff0c;線程管理與死鎖問題往往是性能瓶頸的根源。本文作為“JVM調優實戰”系列的第7天&#xff0c;深入解析…

Kotlin中協程掛起函數的本質

一、核心概念&#xff1a;掛起函數的本質 1. 核心定義 掛起函數&#xff08;Suspending Function&#xff09;是 Kotlin 協程的核心機制&#xff0c;它允許函數在執行過程中暫停&#xff08;掛起&#xff09;而不阻塞線程&#xff0c;并在條件滿足時恢復執行。 2. 與普通函數…

人工智能中的集成學習:從原理到實戰

大家好&#xff01;今天我們來聊聊人工智能領域中一個非常強大的技術——集成學習&#xff08;Ensemble Learning&#xff09;&#x1f60e;。——這個讓模型預測能力飆升的“團隊合作”神器&#xff01;無論你是剛入門的新手還是想復習的老司機&#xff0c;這篇通俗教程都能幫…

大事件項目記錄13-登錄優化-redis

一、redis優化登錄接口。 原有代碼中在修改密碼在產生新令牌后并未將舊的令牌主動失效&#xff0c;舊的令牌依然可以使用 &#xff0c;會產生安全隱患&#xff0c;所以需要對其進行優化。 1.令牌主動失效機制。 &#xff08;1&#xff09;登錄成功后&#xff0c;給瀏覽器響應令…

重塑音視頻敘事:Premiere文本剪輯與Podcast AI降噪的革命性工作流

一、 開篇的另一些心里話 最近淘到個好東西&#xff0c;是來自奧地利Blueskyy藝術學院的Adobe教育版授權&#xff0c;深度體驗下來&#xff0c;感覺就像是給我的創意工具箱做了一次“滿配”升級&#xff0c;有些心得不吐不快&#xff0c;必須跟同路的設計師朋友們碰一碰。 在分…

面向隱私保護的機器學習:聯邦學習技術解析與應用

在當今數字化時代&#xff0c;數據隱私和安全問題日益受到關注。隨著《數據安全法》《個人信息保護法》等法律法規的實施&#xff0c;企業和機構在數據處理和分析過程中面臨著越來越嚴格的合規要求。然而&#xff0c;機器學習模型的訓練和優化往往需要大量的數據支持&#xff0…