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黑

参考官方文档

相关推荐
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
孙启超3 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
此生决int3 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++
CoderYanger3 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
伞伞悦读3 天前
【第37期】Python JSON 与配置详解:序列化、反序列化、嵌套结构和配置文件
开发语言·python·json
CCCCCCCCharlie3 天前
Linux进程控制四大核心操作
linux·开发语言
Brilliantwxx3 天前
【STM32】 SPI Flash 驱动开发实战:阻塞模式驱动 W25Q64(含工程代码)
开发语言·stm32·单片机·嵌入式硬件