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黑

参考官方文档

相关推荐
wuyk5557 小时前
Python 零基础入门第九章:用户输入与 While 循环
开发语言·python
兮动人7 小时前
Python变量与常量
开发语言·python·机器学习·python变量与常量
风筝在晴天搁浅7 小时前
解题代码清爽版
java·开发语言
Java后端的Ai之路7 小时前
21、Python - 命令模式
开发语言·人工智能·python·命令模式·外观模式
astronautyi7 小时前
Go 运行时内存分配与 GC 位图深度剖析
开发语言·后端·golang
techdashen7 小时前
Go 中如何处理错误
开发语言·后端·golang
孙克旭_8 小时前
JVM 入门详解:JVM、JRE、JDK 区别,JVM 基础结构梳理
java·开发语言·jvm
随遇而安zx8 小时前
【地基篇】---JVM 内存结构知识点(Java 8 运行时数据区深度解析)
java·开发语言·jvm
FfHUCisI8 小时前
Golang 切片扩容策略
开发语言·数据库·golang
en.en..8 小时前
Ubuntu嵌入式开发 export环境变量
java·开发语言·数据库