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-规则持久化.md,rule-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黑

参考官方文档

相关推荐
nice_lcj52011 小时前
ThreadLocal 入门:它是怎么隔离数据的、为什么会导致内存泄漏
java·开发语言·后端·面试·并发编程·内存泄漏·threadlocal
紧跟先前的步伐11 小时前
Go AI Agent 实战 28|Agent 的预算、超时与停止条件
开发语言·人工智能·后端·ai·golang
bksczm12 小时前
InnoDB 行格式详解:DYNAMIC / COMPACT / COMPRESSED / REDUNDANT
java·开发语言·数据库
春涧草茶13 小时前
慢就是快16-1协程
开发语言·前端·python
Dovis(誓平步青云)13 小时前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
做科研的周师兄13 小时前
【R语言实战】MixSIAR 氢氧同位素水源解析全流程:从混合空间校验到贝叶斯 MCMC 收敛诊断(后附完整代码)
java·大数据·开发语言
.痞老板.15 小时前
java ee--计算机是如何工作的
java·开发语言·java-ee
奇树谦15 小时前
Qt Quick 图片加载与 GPU 纹理机制详解:QImage、QQuickTextureFactory、QSGTexture 与异步加载
开发语言·qt·系统架构
青梅味猪大肠15 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
starzy199016 小时前
深入理解Scala可变Map:动态构建场景下的性能与设计权衡
开发语言·scala