当前位置: 首页 > news >正文

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.lryc.cn/news/575402.html

相关文章:

  • 【机器学习第一期(Python)】梯度提升决策树 GBDT
  • 【机器学习第二期(Python)】优化梯度提升决策树 XGBoost
  • Linux命令-Searching-locate
  • Docker compoes与私有仓库部署
  • 基于vue3+ByteMD快速搭建自己的Markdown文档编辑器
  • Midscene.js:使用 LLMs.txt 快速生成 AI 自动化测试用例「喂饭教程」
  • [Andrej Karpathy] 大型语言模型作为新型操作系统
  • 华为OD 机试 2025-黑板上色
  • 【25软考网工】第十章 网络规划与设计(2)网络规划与分析、网络结构与功能
  • 如何进行 iOS App 混淆加固?IPA 加壳与资源保护实战流程
  • 如何将视频从 iPhone 发送到 Android 设备
  • 数字孪生技术驱动UI前端变革:从静态展示到动态交互的飞跃
  • uniapp 和原生插件交互
  • 小程序入门:理解小程序页面配置
  • vue + vue-router写登陆验证的同步方法和异步方法,及页面组件的分离和后端代码
  • 命名数据网络 | 数据包(Data Packet)
  • chili3d笔记23 正交投影3d重建笔记4 点到线2
  • 【NLP】使用 LangGraph 构建 RAG 的Research Multi-Agent
  • house of apple2
  • Linux系统(信号篇):信号的产生
  • 【Pandas】pandas DataFrame shift
  • Ubuntu下布署mediasoup-demo
  • 黑马JVM解析笔记(四):Javap图解指令流程,深入理解Java字节码执行机制
  • Redis 为什么选用跳跃表,而不是红黑树
  • 《聊一聊ZXDoc》之汽车标定、台架标定、三高标定
  • 【STM32】外部中断
  • 【C++11】右值引用和移动语义
  • gRPC 使用(python 版本)
  • 2025学年湖北省职业院校技能大赛 “信息安全管理与评估”赛项 样题卷(五)
  • Axure版TDesign 组件库-免费版