Sentinel Dashboard修改内容汇总

Sentinel Dashboard 修改内容汇总

本文档对比了自有项目 sentinel-dashboard 与官方 Sentinel-1.8.6/sentinel-dashboard 的目录差异,将核心修改内容按功能模块划分,详细列出了变更逻辑与涉及的变更文件清单。

1. Nacos 规则持久化集成

修改逻辑
官方原版 Dashboard 通过 SentinelApiClient 接口将规则直接推送到各个客户端节点的内存中,一旦客户端重启规则就会丢失。
自有项目将规则存储改造为 Nacos 持久化推拉模式:Dashboard 直接与 Nacos 交互读写规则,客户端通过监听 Nacos 实现规则的动态更新与持久化。

变更文件清单

  • pom.xml:引入 sentinel-datasource-nacos 依赖(移除 test scope),新增 fastjson2 依赖。
  • src/main/resources/application.properties:新增 Nacos 连接地址 (nacos.serverAddr)、命名空间 (nacos.namespace) 等核心配置项。
  • src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/rules/nacos/*(新增) Nacos 交互核心包,包含了各类型规则(流控、降级、授权、热点参数、系统规则)的 Nacos Provider 和 Publisher 实现类,以及 Nacos 配置类 (NacosConfig)。
  • src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AuthorityRuleController.java
  • src/main/java/com/alibaba/csp/sentinel/dashboard/controller/DegradeController.java
  • src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java
  • src/main/java/com/alibaba/csp/sentinel/dashboard/controller/SystemController.java
  • src/main/java/com/alibaba/csp/sentinel/dashboard/controller/v2/FlowControllerV2.java

    :以上 Controller 均修改了依赖注入逻辑,将原有的直接推送模式替换为使用 @Qualifier("xxxNacosProvider/Publisher") 注入来读写 Nacos 规则。


2. 鉴权机制改造 (无状态 Cookie Token)

修改逻辑
官方原版采用 SimpleWebAuthServiceImpl 基于 Session 的状态登录。为了适应多实例部署场景,防止因 Session 丢失导致重复登录,自有项目将其改造为基于 Cookie 和 HMAC SHA256 签名的无状态 Token 鉴权机制

变更文件清单

  • src/main/java/com/alibaba/csp/sentinel/dashboard/auth/CookieTokenAuthServiceImpl.java(新增) 实现无状态 Token 的生成、解析和校验防篡改逻辑。
  • src/main/java/com/alibaba/csp/sentinel/dashboard/config/AuthProperties.java:新增 Cookie 名称、路径、Token TTL (过期时间)、Token Secret 等配置属性。
  • src/main/java/com/alibaba/csp/sentinel/dashboard/config/AuthConfiguration.java:根据配置文件自动注入 CookieTokenAuthServiceImpl 替代原有的 Session 鉴权实现。
  • src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AuthController.java:修改 login 接口,登录成功后不再向 Session 中写入信息,而是生成签名 Token 并通过 HttpServletResponse 写入 Cookie。

3. 全局唯一 ID 生成与 JS 精度丢失修复

修改逻辑
原版内存规则存储(InMem*Store)采用 AtomicLong 自增生成规则 ID,Dashboard 重启后 ID 会从 0 重新开始。由于集成了 Nacos 持久化,规则 ID 需要在全局保持唯一且递增,因此引入了雪花算法 (Snowflake) 生成 64 位长整型 ID。
同时,为了解决前端 JavaScript 处理大于 2^53 - 1 的长整型时发生精度丢失的问题,在前端全局 HTTP 拦截器中进行了兼容转换。

变更文件清单

  • src/main/java/com/alibaba/csp/sentinel/dashboard/util/SnowflakeIdWorker.java(新增) 雪花算法 ID 生成器。
  • 以下内存存储库类的 nextId() 方法替换为 SnowflakeIdWorker.getInstance().nextId()
    • InMemApiDefinitionStore.java (Gateway)
    • InMemGatewayFlowRuleStore.java (Gateway)
    • InMemAuthorityRuleStore.java
    • InMemDegradeRuleStore.java
    • InMemFlowRuleStore.java
    • InMemParamFlowRuleStore.java
    • InMemSystemRuleStore.java
  • src/main/webapp/resources/app/scripts/app.js:添加 HTTP 拦截器 (transformResponse),通过正则匹配,将接口返回 JSON 中的 id/ruleId 大整数转换为字符串格式,彻底解决前端精度丢失问题。

4. 集群管理优化与前端批量操作扩展

修改逻辑

  1. Bug 修复:修复了集群节点模式切换时偶发的 NullPointerException (NPE)。
  2. 集群配置扩展:前端及后端新增了更丰富的集群客户端配置能力。
  3. 批量添加规则:在前端流控和链路页面,新增了规则的“批量添加”交互功能,大幅提升了在大规模资源场景下的配置效率,并配有加载进度遮罩层。

变更文件清单

  • src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java:增加对 serverStateVOgetConnection() 的判空逻辑,修复模式切换时的 NPE。
  • src/main/java/com/alibaba/csp/sentinel/dashboard/controller/v2/ClusterConfigController.java(新增) 增加集群配置管理 V2 接口。
  • src/main/webapp/resources/app/views/dialog/bulk-add-flow-rule-dialog.html(新增) 批量添加流控规则的 UI 弹窗模板。
  • src/main/webapp/resources/app/scripts/controllers/flow_v1.js & flow_v2.js & identity.js:前端业务逻辑扩展,支持批量添加规则、加载进度动画等交互升级。
  • src/main/webapp/resources/app/scripts/controllers/cluster_client_config.js 等集群 UI 文件:(新增/修改) 新增集群客户端配置页面及前端路由挂载。
  • src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html:侧边栏菜单样式和层级显示优化。
  • src/main/webapp/resources/.jshintrc:放宽了前端 JS 的代码检查规范(如 eqeqeq 设为 false,maxlen 增加到 1000 等)。
  • 根目录 sentinel-dashboard-nacos-改造指南.md(新增) 项目改造说明文档。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容