微服务11-Sentinel中的授权规则以及Sentinel服务规则持久化
文章目录
- 授权规则
- 自定义异常结果
- 规则持久化
- 实现Push模式
授权规则
根据来源名称对请求进行拦截 ——>我们需要解析来源名称(RequestOriginParser默认解析都为default),所以我们要自定义一个实现类(根据请求头解析,给运行访问的来源+一个请求头
防止绕过,请求我们的服务,对请求来源进行授权

1.对于我们客户端请求过来的资源,服务需要进行判断是浏览器还是网关
自定义实现RequestOriginParser请求解析器来获取请求的来源

2.尝试在request请求头中加一个origin请求头,给网关加一个
从网关来的请求就有这个请求头,而从浏览器来的就没有——>以此做一个区分
@Component
public class HeaderOriginParser implements RequestOriginParser {@Overridepublic String parseOrigin(HttpServletRequest httpServletRequest) {
//1.获取请求头String origin = httpServletRequest.getHeader("origin");
//2.进行请求头的非空判断if (StringUtils.isEmpty(origin)) {origin = "blank";}return origin;}
}
3.对请求头进行资源处理后,还需要对gateway网关添加origin请求头中参数值,然后我们要通过网关路由userservice服务时,就会带origin请求头,在资源处理器进行处理时就会放行;
gateway:routes:- id: user-service # 路由标示,必须唯一uri: lb://userservice # 路由的目标地址predicates: # 路由断言,判断请求是否符合规则- Path=/user/** # 路径断言,判断路径是否以/user开头,如果是则符合,跳转路由- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**filters: # 过滤器添加一个请求头- AddRequestHeader=Truth,Itcast is freaking aowsome!default-filters: # 对所有路由生效- AddRequestHeader=origin,gateway #添加origin请求头,值为gateway
此时我们localhost:8081/user/1还是能够访问的,还没有配置授权规则
4.最后在Sentinel中配置授权规则只有网关过来才能访问

5.此时绕过网关访问,会发现被拦截

6.然后我们通过网关访问,因为在之前的配置类中加入了一个网关请求的过滤器
认证我们的请求加上一个叫authorization且值为admin的参数,否则拦截
过滤器代码:
@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();//1.得到request中的所有参数MultiValueMap<String, String> params = request.getQueryParams();//2.获取里面含有authorization的参数String auth = params.getFirst("authorization");//3.判断参数是否符合:authorization==adminif("admin".equals(auth)){return chain.filter(exchange);}//4.进行拦截,并且设置响应状态码exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}
}

总结:授权生效
自定义异常结果


自定义异常:


最重要的两个接口:
RequestOriginParser——>用来解析请求资源的(一般用于授权规则里头)
BlockExceptionHandler——>用来处理异常(根据是限流异常还是热点参数异常还是降级异常。。。设置状态信息)

规则持久化
场景:当我们的服务重启时,Sentinel会进行重启,服务会丢失
原因:Sentinel的默认模式会将默认的规则放到内存中,所以会丢失

对Sentinel推送规则进行监听,一旦发现变化,发送数据库(定时)
缺点:时效性较差,因为它是定时将规则保存在数据库中,比如你数据刚保存,然后你立马调用,此时就不会数据保存了;

将配置规则先推送到配置中心nacos之类的,然后我们的Sentinel客户端监听nacos,配置变更就会完成本地配置更新;——>本质上是利用nacos的监听特质
实现Push模式


相关文章:
微服务11-Sentinel中的授权规则以及Sentinel服务规则持久化
文章目录 授权规则自定义异常结果规则持久化实现Push模式 授权规则 根据来源名称对请求进行拦截 ——>我们需要解析来源名称(RequestOriginParser默认解析都为default),所以我们要自定义一个实现类(根据请求头解析,…...
私有化部署AI智能客服,解放企业成本,提升服务效率
在信息时代,企业面临着服务效率提升和成本压力的双重挑战。作为一个领先品牌,WorkPlus致力于为企业提供私有化部署的AI智能客服解决方案。本文将深入探讨WorkPlus AI智能客服如何帮助企业解放成本、提升服务效率以及打造个性化的卓越客户体验。 AI智能客…...
docker数据卷+挂载(命令讲解+示例)
在容器中管理数据主要有两种方式: 数据卷(Volumes) 、挂载主机目录 (Bind mounts)。 一、数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用。 特点: 对 数据卷 的修改会立马生效对 …...
【webrtc 】FEC 1: 音频RED rfc2198及视频ULPFEC的RED封装
1 参考和引用 M79 代码。 ULPFEC报文构建流程 与大神的分析: WebRTC-FEC协议总结 一致 CrystalShaw 大神的文章 ULPFEC在WebRTC中的实现 WebRTC研究:FEC之RED封装 本文是大神们文章和代码的学习笔记。red封包(rfc2189)1.1 RED(Redundant Coding) 封装 Ulpfec 非均等保护前向纠…...
【Qt】Qt再学习(十七):QThread、QMutex、QTimer
1、QThread 1.1 简介 QThread实现了跨平台的方式来管理线程。一个QThread对象管理一个线程。 1.2 创建线程方法 1)使用QObject::moveToThread()函数将工作对象移动到线程中,该对象的槽函数将在新线程中运行,其它函数还在父线程中运行。 参见本人博客《【Qt】QObject::mo…...
scratch身高统计 2023年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析
目录 scratch身高统计 一、题目要求 1、准备工作 2、功能实现 二、案例分析...
SpringBoot面试题4:Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个? Spring Boot支持多种日志框架,包括以下几种: Logback:Logback 是一个快速、灵活…...
Git 常用命令汇总
导言 如果你是新手小白,完全不懂git,可以先看这一篇 github 详细教程 本文仅适用于对 git 操作已经有了一定掌握的用户,本文的目的在于将常用命令统一梳理记录,便于查阅。 干货 克隆指定分支:git clone -b <branc…...
最好的开放式蓝牙耳机有哪些?排名前五的开放式耳机五强
越来越多的人开始选择蓝牙耳机作为他们的音频解决方案。蓝牙耳机市场提供了各式各样的选择,不仅有常见的头戴式、耳塞式和半入耳式,还有一种备受欢迎的"开放式耳机"。今天,我将向大家介绍一些优秀的开放式蓝牙耳机款式,…...
docker-machine常用
docker-machine常用 什么是Docker Machine?Docker Machine默认支持的驱动安装kvm驱动 安装和配置Docker Machine环境准备node1安装Dockernode1安装Docker Machine为Docker Machine安装自动补全为Docker Machine准备boot2docker.iso镜像为node2创建machine主机 管理远…...
【Redis】Java客户端使用list命令
lpush/lrange rpush/rpop/lpop blpop/brpop llen...
ubuntu下yolov6 tensorrt模型部署
TensorRT系列教程之 Windows10下yolov8 tensorrt模型加速部署TensorRT系列教程之 Linux下 yolov8 tensorrt模型加速部署TensorRT系列教程之 Linux下 yolov7 tensorrt模型加速部署TensorRT系列教程之 Linux下 yolov6 tensorrt模型加速部署TensorRT系列教程之 Linux下 yolov5 ten…...
k8s查看当前命名空间下所有运行的 pod 对应的镜像
1,查看镜像 kubectl -n xxx get pods | grep Running | awk {print $1} | xargs -r -I {} kubectl -n xxx get pods {} -ojsonpath{.status.containerStatuses[0].image}{"\n"} | sort 2,去重查看 kubectl -n namespace get pods -o jsonp…...
傅里叶变换和其图像处理中的应用
以下部分文字资料整合于网络,本文仅供自己学习用! 一、为什么要在频域进行图像处理? 一些在空间域表述困难的增强任务,在频率域中变得非常普通 滤波在频率域更为直观,你想想嘛,所谓滤波,就是…...
风电厂VR情景式三维模拟实训系统让教育更加贴近实际
VR虚拟仿真实训室是一种利用虚拟现实技术和仿真技术,为教学和学生实训提供虚拟环境和实践机会的设施。它通过将学生置身于虚拟场景中,让他们可以身临其境地参与到实际场景中,从而提高实际操作能力和技能水平。 在教学方面,VR虚拟仿…...
竞赛 深度学习+python+opencv实现动物识别 - 图像识别
文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 *…...
LeetCode 2562. 找出数组的串联值:模拟(双指针)
【LetMeFly】2562.找出数组的串联值:模拟(双指针) 力扣题目链接:https://leetcode.cn/problems/find-the-array-concatenation-value/ 给你一个下标从 0 开始的整数数组 nums 。 现定义两个数字的 串联 是由这两个数值串联起来…...
【mac】常用命令01
1、如何像windows一样看磁盘? 不断的在上层文件夹显示,找到最上层,拖拽到左侧,方便之后找 2、Macintosh HD显示隐藏文件夹方法 终端窗口: defaults write com.apple.finder AppleShowAllFiles true killall Finder 或者…...
android 13.0 添加系统字体并且设置为默认字体
1.概述 在13.0系统定制化开发中,在产品定制中,有产品需求对于系统字体风格不太满意,所以想要更换系统的默认字体,对于系统字体的修改也是常有的功能,而系统默认也支持增加字体,所以就来添加楷体字体为系统字体,并替换为系统默认字体, 接下来就来分析下替换默认字体的方…...
平面设计师要会3D吗 优漫动游
所谓物以稀为贵,对于设计人才也一样。越是稀缺的能力,能够发挥的价值就越高。于是现在很多互联网名企在招聘的时候都加了一条:会3D设计者优先。 其实这些看起来很厉害的设计,归结起来无非就三种形式:插画、三维、合成…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
如何使用CodeRider插件在IDEA中生成代码
一、环境搭建与插件安装 1.1 环境准备 名称要求说明操作系统Windows 11JetBrains IDEIntelliJ IDEA 2025.1.1.1 (Community Edition)硬件配置推荐16GB内存50GB磁盘空间 1.2 插件安装流程 步骤1:市场安装 打开IDEA,进入File → Settings → Plugins搜…...
FTPS、HTTPS、SMTPS以及WebSockets over TLS的概念及其应用场景
一、什么是FTPS? FTPS,英文全称File Transfer Protocol with support for Transport Layer Security (SSL/TLS),安全文件传输协议,是一种对常用的文件传输协议(FTP)添加传输层安全(TLS)和安全套接层(SSL)加密协议支持的扩展协议。…...
