微服务保护学习笔记(五)Sentinel授权规则、获取origin、自定义异常结果、规则持久化

news2024/9/20 14:55:00

文章目录

  • 前言
  • 4 授权规则
    • 4.1 基本原理
    • 4.2 获取origin
    • 4.3 配置授权规则
  • 5 自定义异常结果
  • 6 规则持久化

前言

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装
微服务保护学习笔记(二)簇点链路、流控操作、流控模式(关联、链路)
微服务保护学习笔记(三)流控效果(warm up、排队等待)、热点参数限流
微服务保护学习笔记(四)FeignClient整合Sentinel、线程隔离(舱壁模式)、熔断降级

4 授权规则

4.1 基本原理

授权规则可以对服务调用方的来源做控制,有白名单和黑名单两种方式:

  • 白名单:来源(origin)在白名单内的调用者允许访问
  • 黑名单:来源(origin)在黑名单内的调用者不允许访问

点击Sentinel控制台左侧菜单“授权规则”,可以新增授权规则:

  • 资源名:受保护的资源,例如/order/query
  • 流控应用:调用方名单(origin)
  • 授权类型:设置调用方名单是白名单还是黑名单

4.2 获取origin

Sentinel是通过RequestOriginParser这个接口的parseOrigin()方法来获取请求的来源的。

这个方法的作用是从request对象中,获取请求者的origin值并返回。默认情况下,Sentinel不管请求者从哪里来,返回值永远是default,也就是说一切请求的来源都被认为是一样的值default。

因此,自定义这个接口的实现,就可以让不同的请求,返回不同的origin

sd-user-service微服务中,定义一个RequestOriginParser实现类:

@Component
public class HeaderOriginParser implements RequestOriginParser {

    @Override
    public String parseOrigin(HttpServletRequest request) {
        // 获取请求头
        String origin = request.getHeader("Origin");
        if(StringUtils.isEmpty(origin)) {
            origin = "blank";
        }
        return origin;
    }
}

4.3 配置授权规则

sd-user-service微服务配置授权规则,设置origin为sd-user-service的请求为白名单:

测试:

可见,/user/query资源只允许origin请求头为sd-user-service的请求调用。

5 自定义异常结果

默认情况下,当发生限流、降级或授权拦截时,都会抛出异常到调用方,并且异常结果都是flow limmiting(即限流,从4.3节的截图可以看出)。这样不够友好,无法得知具体原因。

Sentinel提供了一个BlockExceptionHandler接口,用于自定义异常结果:

handle()方法有三个参数,其中第三个参数BlockException就是Sentinel拦截时抛出的异常。

BlockException类又包含多个不同的子类:

sd-user-service微服务中,定义一个BlockExceptionHandler实现类:

@Component
public class SentinelExceptionHandler implements BlockExceptionHandler {

    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
        String msg = "未知异常";
        int status = 429;
        if (e instanceof FlowException) {
            msg = "请求被限流了";
        } else if (e instanceof ParamFlowException) {
            msg = "请求被热点参数限流";
        } else if (e instanceof DegradeException) {
            msg = "请求被降级了";
        } else if (e instanceof AuthorityException) {
            msg = "没有授权访问";
            status = 401;
        }
        response.setContentType("application/json;charset=utf-8");
        response.setStatus(status);
        response.getWriter().println("{\"msg\": " + msg + ", \"status\": " + status + "}");
    }
    
}

重启微服务,配置授权规则,发起origin请求头为sd-user-service的请求:

6 规则持久化

在默认情况下,Sentinel的所有规则都是内存存储,重启后所有规则都会丢失。因此在上面的测试中,每次重启微服务,Sentinel配置的规则均会消失。

规则是否能持久化,取决于规则管理模式,Sentinel支持三种规则管理模式:

  • 原始模式:Sentinel的默认模式,将规则保存在内存,重启服务会丢失。
  • pull模式:Sentinel控制台将配置的规则推送到Sentinel客户端,而客户端会将配置规则保存在本地文件或数据库中,以后会定时去本地文件或数据库中查询,更新本地规则。

  • push模式:Sentinel控制台将配置规则推送到远程配置中心,例如Nacos。Sentinel客户端监听Nacos,获取配置变更的推送消息,完成本地配置更新。

本节完,更多内容请查阅分类专栏:微服务学习笔记

感兴趣的读者还可以查阅我的另外几个专栏:

  • SpringBoot源码解读与原理分析
  • MyBatis3源码深度解析
  • Redis从入门到精通
  • MyBatisPlus详解
  • SpringCloud学习笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2149189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言 14 结构体 联合体 枚举

之前认识过很多种数据类型,包括整数、小数、字符、数组等,通过使用对应的数据类型,就可以很轻松地将数据进行保存了,但是有些时候,这种简单类型很难去表示一些复杂结构。 结构体 比如现在要保存 100 个学生的信息&am…

本地部署一个轻量化智能聊天服务Vocechat并实现异地远程交互

文章目录 前言1. 拉取Vocechat2. 运行Vocechat3. 本地局域网访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问小结 7. 固定公网地址 前言 本文主要介绍如何在本地群晖NAS搭建一个自己的聊天服务Vocechat,并结合内网穿透工具实现使用任意浏览器远程访问进行智能聊天…

我的AI工具箱Tauri版-VideoReapeat视频解说复述克隆

本教程基于自研的AI工具箱Tauri版进行VideoReapeat视频解说复述克隆。 VideoReapeat视频解说复述克隆 是自研的AI工具箱Tauri版中的一款专用模块,旨在通过AI技术对视频解说内容进行复述和克隆。该工具可自动洗稿并重新生成视频解说,通过简单配置即可对大…

协同编程的艺术:SIDE 让团队协作更上一层楼

一、协同编程的现状 在当前软件开发中,团队协作面临着诸多挑战。沟通不畅常常导致项目进度延迟,版本控制复杂使得代码合并困难重重。传统 IDE 在协同工作方面存在明显的局限性,缺乏实时协作功能,团队成员之间的沟通工具也不够完善…

如何上传tauri项目到csdn gitcode

如何上传tauri项目到csdn gitcode 首先保证项目目录有.gitignore,避免不必要的文件上传分享。 gitignore文件 # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log*node_modules dist dist-ssr *.local# Editor …

浅谈如何入门游戏漏洞挖掘,零基础入门到精通,收藏这一篇就够了

引言 每个白帽子心中,都有一团火 那就是对网络安全的信念 哪怕,是一条少有人走的路 补天希望与更多同路人携手,再向前一步 2021年补天平台启动“技术模块” 牛年新春特别分享单元 大年初一至初七 每天一个精选技术方向 每天一条原创…

QMT获取可转债行情数据方法介绍!支持QMT量化软件的券商平台?

获取可转债行情 为了获取转债的日线/1m/1d的k数据,以通过数据订阅形式获取最新行情subscribe_quote。如果您需要获取历史数据,可以使用download_history_data函数下载相关数据,然后使用get_market_data_ex函数提取所需的信息。这样&#xff…

Smartbi AIChat应用案例-某保险集团内部经营分析

案例简介 某保险企业面对大数据时代下的业务发展挑战,面临数据查询、分析与探索需求的激增。然而,当前的数据基础设施与应用方式已难以满足业务快速发展的需求。企业面临分析链路长、报表时效性低、制作效率低且灵活度不足、无效报表堆积等困局。为打破这…

探索《越南语翻译通》App:高效语言学习的利器

在当今这个全球化的世界里,语言学习变得越来越重要。随着科技的发展,我们有了更多便捷的工具来帮助我们学习新的语言。今天,我们来探索一款名为《越南语翻译通》的App,它正逐渐成为语言学习者的新宠。 《越南语翻译通》App的特点…

Linux安装(带VM激活码)

1.安装Vmare WorkStation虚拟机 VMware Workstation Pro是VMware(威睿公司)发布的一代虚拟机软件,中文名称为"VMware 工作站".它的主要功能是可以给用户在单一的桌面上同时运行不同的操作系统,它也是可进行开发、测试、…

笑不活了!薅走羊毛党20亿跑路?这生意我横竖没看懂……

昨天,各种八卦群传出一张非常离谱的截图,被无数吃瓜群众称为这是今年最好笑的事,纷纷表示能不能把我拉群里,让我再笑会……。 截图大概是这样的,博主开头先是发了几个哈哈哈,隔着屏幕都能感受到这事到底有…

3个月9次迭代,快手可灵AI面向全球发布1.5模型

9月19日,可灵AI迎来重磅升级,视频生成新增可灵1.5模型,在画质质量、动态质量、美学表现、运动合理性以及语义理解等方面均有显著提升。与此同时,可灵AI还引入了全新的“运动笔刷”功能,进一步提升视频生成的精准控制能…

电能计量,三相电基础

1. 三相交流电基础 三相交流电由三个频率相同、振幅相等、相位依次互相差120的交流电势组成。这样组织的三相电有一个特点,就是任何一个时刻,三相电的电压之和都等于零。这个特性使得本来需要六根导线来传输三组电压的减少到了三根导线,这样…

访问者模式:将算法与对象结构分离的设计模式

在软件开发中,我们常常需要对对象结构中的各个元素进行不同的操作。比如在编译器中,我们可能需要对抽象语法树(AST)的各个节点进行语法检查、代码生成、优化等操作。如果将这些操作直接嵌入到节点类中,会导致类的职责过…

一、桥式整流电路

桥式整流电路 1、二极管的单向导电性: 伏安特性曲线: 理想开关模型和恒压降模型 2、桥式整流电流流向过程 输入输出波形: 3、计算:Vo,lo,二极管反向电压。 学习心得

数字病理图像处理:分割、合成与数据增强研究|顶刊精析·24-09-20

小罗碎碎念 今日精析:Medical Image Analysis 这篇文章介绍了一种结合了先进分割模型和生成对抗网络的病理切片图像分析流程,用于提高癌症诊断的准确性和效率。 作者角色姓名单位名称(中文)第一作者Muhammad Jehanzaib博阿齐奇大学…

安卓13修改设置设备型号和设备名称分析与更改-android13设置设备型号和设备名称更改

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 用户要定制一些系统显示的设备型号和设备名称,这就需要我们分析设置里面的相关信息来找到对应的位置进行修改了。 2.问题分析 像这种信息要么是config.xml里面写死了,要…

一、编译原理(引论)

目录 【一】、引论 一、编译器 1、编译器 2、编译器与解释器 3、编译器结构 【一】、引论 一、编译器 1、编译器 (1)编译器:将人类易懂的 高级语言 翻译成 硬件可执行的目标机器语言 (2) 高级语言 ⚫ 直接面…

数据结构------二叉树简单介绍及实现

如果不是满二叉树或者完全二叉树,就要用链式存储 //搜索二叉树:左子树的所有值比根小,右子树的所有值比根大 // 实现查找,最多找高度次(类似二分法) //二分查找存在的问题&#xff1a…

【C++】——多态详解

目录 1、什么是多态? 2、多态的定义及实现 2.1多态的构成条件 ​2.2多态语法细节处理 2.3协变 2.4析构函数的重写 2.5C11 override 和 final关键字 2.6重载—重写—隐藏的对比分析 3、纯虚函数和抽象类 4、多态的原理分析 4.1多态是如何实现的 4.2虚函数…