Sentinel架构篇 - 来源访问控制
来源访问控制(黑白名单)
概念
Sentinel 提供了黑白名单限制资源能否通过的功能。如果配置了白名单,则只有位于白名单的请求来源的对应的请求才能通过;如果配置了黑名单,则位于黑名单的请求来源对应的请求不能通过。
实际操作

在 Nacos 控制台的配置管理/配置列表中,在 public 的命名空间中创建一个如下配置:
dataId:spring-cloud-demo-provider-sentinel-authority
group:DEFAULT_GROUP
配置内容如下:
[{"resource": "/hello","limitApp": "white-origin","strategy": 0},{"resource": "/hello/say","limitApp": "black-origin","strategy": 1}
]
strategy 为 0 表示白名单;为 1 表示黑名单。
limitApp 如果有多个请求来源,则使用逗号分隔。
对应的客户端的配置文件如下:
spring:application:name: spring-cloud-demo-providercloud:nacos:discovery:server-addr: 10.211.55.11:8848,10.211.55.12:8848,10.211.55.13:8848enabled: truesentinel:transport:dashboard: 127.0.0.1:9000eager: trueweb-context-unify: falsedatasource:authority-nacos-datasource:nacos:server-addr: 10.211.55.11:8848,10.211.55.12:8848,10.211.55.13:8848group-id: DEFAULT_GROUPnamespace: publicdata-id: ${spring.application.name}-sentinel-authoritydata-type: jsonrule-type: authorityusername: nacospassword: nacos
然后注册一个 RequestOriginParser 类型的 Bean。
@Component
public class MyRequestOriginParser implements RequestOriginParser {@Overridepublic String parseOrigin(HttpServletRequest httpServletRequest) {String origin = httpServletRequest.getHeader("origin");if (StringUtils.isBlank(origin)) {origin = "default";}return origin;}
}
请求时,在请求头添加一对 origin, whiteOrigin 或者 origin, blackOrigin 就能看到黑白名单对于特定资源的限制效果了。
实际操作中,个人发现如果被黑白名单限制的话,程序不会抛出异常,而是响应中输出 Blocked by Sentinel (flow limiting)。
AuthoritySlot
负责对请求来源的授权规则进行校验。
@Spi(order = Constants.ORDER_AUTHORITY_SLOT)
public class AuthoritySlot extends AbstractLinkedProcessorSlot<DefaultNode> {@Overridepublic void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count, boolean prioritized, Object... args)throws Throwable {// 校验请求来源的授权规则checkBlackWhiteAuthority(resourceWrapper, context);// 交给下一个ProcessorSlot继续处理fireEntry(context, resourceWrapper, node, count, prioritized, args);}@Overridepublic void exit(Context context, ResourceWrapper resourceWrapper, int count, Object... args) {// 交给下一个ProcessorSlot继续处理fireExit(context, resourceWrapper, count, args);}void checkBlackWhiteAuthority(ResourceWrapper resource, Context context) throws AuthorityException {// 加载所有资源的授权规则Map<String, Set<AuthorityRule>> authorityRules = AuthorityRuleManager.getAuthorityRules();// 如果授权规则列表为空,则直接返回if (authorityRules == null) {return;}// 获取指定资源的授权规则列表Set<AuthorityRule> rules = authorityRules.get(resource.getName());// 如果对应的授权规则列表为空,则直接返回if (rules == null) {return;}// 遍历授权规则列表for (AuthorityRule rule : rules) {// 如果有一个授权规则没有校验通过,则抛出异常if (!AuthorityRuleChecker.passCheck(rule, context)) {throw new AuthorityException(context.getOrigin(), rule);}}}
}
接下来看下 AuthorityRuleChecker 的 passCheck 方法的内部逻辑。
static boolean passCheck(AuthorityRule rule, Context context) {// 获取上下文记录的请求来源String requester = context.getOrigin();// 如果请求来源为空或者授权规则的limitApp为空,则返回true,表示校验通过if (StringUtil.isEmpty(requester) || StringUtil.isEmpty(rule.getLimitApp())) {return true;}// 判断授权规则的limitApp中是否存在指定的请求来源int pos = rule.getLimitApp().indexOf(requester);boolean contain = pos > -1;if (contain) {boolean exactlyMatch = false;// 用逗号分隔String[] appArray = rule.getLimitApp().split(",");// 判断授权规则中是否对指定的请求来源进行了限制for (String app : appArray) {if (requester.equals(app)) {exactlyMatch = true;break;}}contain = exactlyMatch;}int strategy = rule.getStrategy();// 如果设置了黑名单,并且授权规则中包含指定的请求来源,则返回false,表示校验不通过if (strategy == RuleConstant.AUTHORITY_BLACK && contain) {return false;}// 如果设置了白名单,并且授权规则中不包含指定的请求来源,则返回false,表示校验不通过if (strategy == RuleConstant.AUTHORITY_WHITE && !contain) {return false;}// 其余请求,返回true,表示校验通过return true;
}
相关文章:
Sentinel架构篇 - 来源访问控制
来源访问控制(黑白名单) 概念 Sentinel 提供了黑白名单限制资源能否通过的功能。如果配置了白名单,则只有位于白名单的请求来源的对应的请求才能通过;如果配置了黑名单,则位于黑名单的请求来源对应的请求不能通过。 …...
多线程的Thread 类及方法
✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 ✨每日一语:海压竹枝低复举,风吹山角晦还明。 目 录🌲一. 线程的复杂性🌴二. Thread 类及常见方法📕2.1 Thread 的常见构…...
QT入门Item Views之QTreeView
目录 一、QTreeView界面相关 1、布局介绍 二、基本属性功能 1、设置单元格不能编辑 2、一次选中一个item 3、去掉鼠标移动到单元格上的虚线框 4、最后一列自适应 三、代码展示 1、创建模型,导入模型 2、 右键菜单栏 3、双…...
Servlet | Servlet简单入门——构建第一个Servlet项目
本专栏主要是记录学习JavaWeb中的Servlet相关知识点,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥Servlet Java入门篇: 🔥Java基础学习篇 Java进阶学习篇(持续更新中)&am…...
Spring的IOC/DI,依赖注入的实现
Spring的IOC/DI,依赖注入的实现 https://download.csdn.net/download/weixin_41957626/87546826 资源地址 1.什么是Spring 1.1spring3 的体系结构图 图1 spring3的体系结构图 图2 spring4体系结构图 比较spring3的体系结构图,spring4去掉了spring3中的st…...
【tensorflow onnx】TensorFlow2导出ONNX及模型可视化教程
文章目录1 背景介绍2 实验环境3 tf2onnx工具介绍4 代码实操4.1 TensorFlow2与ONNX模型导出4.2 ONNX正确性验证4.3 TensorFlow2与ONNX的一致性检查4.4 多输入的情况4.5 设定输入/输出节点5 ONNX模型可视化6 ir_version和opset_version修改7 ONNX输入输出维度修改8 致谢原文来自于…...
天梯赛训练L1-013--L1-015
目录 1、L1-013 计算阶乘和 2、L1-014 简单题 3、L1-015 跟奥巴马一起画方块 1、L1-013 计算阶乘和 分数 10 题目详情 - L1-013 计算阶乘和 (pintia.cn) 对于给定的正整数N,需要你计算 S1!2!3!...N!。 输入格式: 输入在一行中给出一个不超过10的正…...
进程(操作系统408)
进程的概念和特征 概念: 进程的多个定义: 进程是程序的一次执行过程 进程是一个程序及其数据在处理机上顺序执行时所发生的活动 进程时具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位 上面所说…...
浅谈运维工程师的开发能力的培养
写在前面 本文已获得作者授权,作者的博客地址:https://www.cuiliangblog.cn/ 原文链接:浅谈运维工程师的开发能力的培养 一、运维工程师发展路线 1. 传统运维 侧重点是解决具体的问题。要求具备扎实的底层的知识储备,如网络、l…...
Netcode升级到1.2.0网络变量的变化的变化
Netcode升级到1.2.0网络变量的变化1 概述2 继承网络变量 NetworkVariable,派生类构造出错的问题2.1 代码描述2.2 问题记录2.3 解决办法:使用 NetworkVariable 即可3 网络变量 NetworkVariable 类的版本差异比较3.1 差异说明3.2 [1.0.2]版本的网络变量3.3…...
冥想第七百二十二天
1.周六去给朋友讲了一天的软件,给朋友带了2袋面包边,几袋方便面。感谢朋友的款待,做的蒸菜双拼,柠檬风爪,排骨汤,汤圆,牛肉,孜然回锅肉。 2.讲到下午五点,就回去了。感觉…...
AB测试——流程介绍(定义问题和指标选取)
前言: 作为AB测试的学习记录,本文主要介绍了AB测试的基本流程,以及指标类型和如何选取合适指标。 相关文章:AB测试——原理介绍 AB测试的基本流程是什么? AB测试(也称为分流测试)是一种常用的实…...
Linux(Centos)安装Minio集群
目录1:简介2:功能与集成3:架构4:搭建集群4.1:挂载磁盘4.1.1:要求4.1.2:创建挂载目录4.1.3:注意:需要将新建的目录挂在到对应的磁盘下,磁盘不挂载好,集群启动会…...
LeetCode 1662. 检查两个字符串数组是否相等 / 795. 区间子数组个数 / 剑指 Offer 47. 礼物的最大价值
1662. 检查两个字符串数组是否相等 2022.11.1 新的一月又开始了 题目描述 给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同,返回 true ;否则,返回 false 。 数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的…...
【C++】缺省参数函数重载
🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录前言一、缺省参数1.1 缺省参数的概念1…...
Hbuilder 下载与安装教程
文章目录Hbuilder下载与安装教程Hbuilder简介一,下载Hbuilder二,安装Hbuilder三,简单使用四,Hbuilderx 调试Hbuilder下载与安装教程 Hbuilder简介 Builder是DCloud(数字天堂)推出的一款支持HTML5的Web开发…...
Mybatis工程升级到FlunetMybatis后引发的问题以及解决方法
0. 背景交代为了提高开发速度,我打算将公司原有Mybatis框架升级为FlunetMybatis。可是遇到了一系列问题,下面开始爬坑工程结构示意如下:src/ ├── main │ ├── java.com.demo │ │ ├── Application.java //S…...
Oracle VM VirtualBox6.1.36导入ova虚拟机文件报错,代码: E_INVALIDARG (0x80070057)
问题 运维人员去客户现场部署应用服务,客户是windows server 服务器(客户不想买新机器),我们程序是在linux系统里运行(其实windows也可以,主要是为了保持各地环境一致方便更新和排查问题)我们使…...
Superset数据探索和可视化平台入门以及案例实操
1、Superset背景 1.1、Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数据分析引擎,拥有丰富的图表展示形式,并且支持自定义仪表盘。 1.2、环境说明 …...
VisualSP Enterprise - February crack
VisualSP Enterprise - February crack VisualSP(可视化支持平台)提供了一个上下文中完全可定制的培训平台,它可以作为企业web应用程序的覆盖层提供。无论员工正在使用什么应用程序,他们都能够快速访问页面培训和指导,说明如何最有效地使用该…...
LPC2000复位行为解析与调试技巧
1. 理解LPC2000设备的复位行为问题 在嵌入式开发中,复位操作是最基础也是最重要的调试手段之一。当我们使用Keil MDK配合ULINK调试器对Philips(现NXP)LPC2000系列ARM微控制器进行调试时,可能会遇到一个看似简单却令人困惑的现象&a…...
Unity ShaderGraph设计思维:从示例资源读懂URP渲染管线
1. 这不是“示例资源包”,而是一套可复用的ShaderGraph设计思维训练集很多人点开Unity官方ShaderGraph示例资源(Samples for Shader Graph)时,第一反应是:“哦,又是一堆预设效果——水、玻璃、溶解、描边……...
Unity发行版DLL调试:破解IL2CPP元数据加密与mono.dll符号映射
1. 为什么发行版Unity游戏的DLL调试总卡在“找不到符号”这一步?你打包完一个Unity项目,导出为Windows独立发布版本,双击运行一切正常——但当你兴冲冲地用DnSpy打开GameAssembly.dll或Assembly-CSharp.dll,想设个断点看看登录逻辑…...
别再复制粘贴了!手把手带你用DEFINE_PROFILE宏实现一个正弦变化入口速度
从零实现Fluent正弦速度入口:DEFINE_PROFILE宏实战指南 在计算流体力学(CFD)仿真中,标准边界条件设置往往无法满足复杂工况需求。想象这样一个场景:你需要模拟风力发电机叶片在阵风条件下的受力情况,入口风速并非恒定值࿰…...
告别断电重启就丢程序:深入聊聊紫光同创FPGA的Flash固化与CPLD内置eFlash配置差异
紫光同创FPGA与CPLD配置存储机制深度解析:从瞬态下载到永久固化的技术实现 在数字电路设计领域,FPGA和CPLD的可重构特性为硬件开发带来了极大灵活性。然而,这种灵活性背后需要可靠的配置存储机制作为支撑——断电后程序能否自动恢复…...
LimboAI在Godot 4中实现可维护游戏AI的工程化方案
1. 这不是又一个“AI行为树”教程——LimboAI在Godot 4里真正解决的是什么问题? 你有没有在Godot 4里写过这样的AI逻辑:一个巡逻的守卫,发现玩家后追击,进入攻击距离就挥剑,被击中后后退、喊话、短暂硬直,…...
边缘AI落地实战:模型轻量化、硬件加速与端侧部署全链路解析
1. 项目概述:为什么“把AI带到边缘设备”不是一句口号,而是正在发生的产业迁移 “Bringing AI To Edge Devices”——这个标题乍看像科技发布会的PPT副标题,但在我过去十年跑遍深圳华强北模组厂、杭州海康产线、苏州工业视觉集成商和北京智能…...
GEO工具红黑榜:有的在“监测“,有的在“收智商税“
2026年,AI搜索已承接超过40%的传统搜索查询量,品牌面临的不再是"百度一下"的竞价排名,而是AI助手直接给出的"默认答案"。当用户问ChatGPT"推荐一款面霜"或向豆包询问"哪个在线教育平台更好"时&#…...
FTP明文传输风险与Wireshark抓包实证分析
1. 这不是危言耸听:FTP 的“裸奔”现状每天都在发生你有没有在公司内网用过 FTP 上传一份财务报表?有没有在校园网里用 FileZilla 向老师提交课程设计源码?有没有在运维后台用 ftp 命令同步过网站静态资源?如果答案是肯定的&#…...
MoE稀疏激活原理与实战:解密大模型高效计算的核心机制
1. 这不是“参数越多越强”的简单故事:拆解大模型里那个被悄悄藏起来的“开关”你肯定见过这类标题:“GPT-4 参数量突破1.8万亿!”、“DeepSeek-R1 达到6710亿参数!”——光看数字,像在比谁家粮仓堆得更高。但真正懂行…...
