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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…