Sentinel 授权规则

文章目录

Sentinel 授权规则

基于 spring-cloud-demo · order-service · 黑白名单控制调用来源


一、依赖与接入

xml 复制代码
<!-- Sentinel 客户端 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
yaml 复制代码
spring:
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8100 # 控制台

二、授权规则是什么

授权规则(AuthorityRule)控制 谁可以访问 某资源


三、控制台参数字段(完整)

控制台字段 JSON 字段 说明
资源名 resource 保护的资源
流控应用 limitApp 调用方 origin,多个用逗号分隔
授权类型 strategy 0=白名单,1=黑名单
strategy 含义
0 白名单 limitApp 中的来源允许
1 黑名单 limitApp 中的来源 拒绝

四、代码案例

整体链路:Gateway 加 Header → order-service 用 Parser 解析 → Dashboard 流控应用填同一字符串

4.1 Gateway(调用方)设置来源

经网关转发的请求带上来源标识( gateway 模块):

yaml 复制代码
spring:
  cloud:
    gateway:
      server:
        webflux:
          routes:
            - id: order-route
              uri: lb://order-service
              predicates:
                - Path=/order/**
              filters:
                - AddRequestHeader=X-Request-Source, gateway # 请求头标记来源为 gateway

头名 X-Request-Source 与值 gateway 可自定义,但 Parser 读的头名Dashboard 流控应用 须与这里的值对齐。

4.2 order-service 解析来源 RequestOriginParser

java 复制代码
@Component
public class HeaderOriginParser implements RequestOriginParser { // 注册为 Bean

    @Override
    public String parseOrigin(HttpServletRequest request) {
        String origin = request.getHeader("X-Request-Source"); // 与 Gateway AddRequestHeader 头名一致
        return origin != null ? origin : "unknown"; // 无头时用 unknown
    }
}

4.3 流控应用填什么?

RequestOriginParser.parseOrigin() 返回的字符串 ,不是 Nacos 服务名,Sentinel 不会自动识别 Gateway。

环节 配置 本例取值
Gateway 加 Header AddRequestHeader=X-Request-Source, gateway 头值 gateway
Parser 读 Header request.getHeader("X-Request-Source") 返回 gateway
Dashboard 流控应用 limitApp gateway

白名单示例:资源名 /order/read,流控应用 gateway,授权类型 白名单 → 仅经网关转发的请求放行,直连 order-service(无该 Header)会被拒绝。

测试:

bash 复制代码
# 模拟经 Gateway 转发(带来源头)→ 白名单放行
curl -H "X-Request-Source: gateway" "http://127.0.0.1:8080/order/read"

# 直连且无来源头 → origin=unknown → 白名单 gateway 时拒绝
curl "http://127.0.0.1:8080/order/read"

五、JSON 规则片段

持久化见 sentinel-规则持久化.mdrule-type: authority

黑名单示例:

json 复制代码
[
  {
    "resource": "/order/read",
    "limitApp": "blocked-app,malicious",
    "strategy": 1
  }
]

白名单示例:

json 复制代码
[
  {
    "resource": "/order/write",
    "limitApp": "gateway,admin",
    "strategy": 0
  }
]
JSON 字段 说明
limitApp 来源标识,与 RequestOriginParser 返回值一致
strategy 0白 / 1黑

参考官方文档

相关推荐
西安景驰电子1 小时前
《PTP精确时间协议系列》第一篇:从原理到应用,全面解读IEEE 1588
linux·运维·服务器·开发语言·网络·windows·php
ctlover1 小时前
Python文件操作
开发语言·python
luj_17681 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
wuyk5552 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
weixin_383196472 小时前
java基础面试题@Autowired和@Resource区别
java·开发语言
言乐63 小时前
Python游戏水平测试辅助系统2
开发语言·windows·python·游戏·django
我不是疯子是傻子3 小时前
Qt 实时曲线卡顿优化:从QPainter到OpenGL的3级加速实战
开发语言·qt
zlinear数据采集卡3 小时前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
nnerddboy4 小时前
Rust教程04:引用、借用与切片
开发语言·后端·rust