Sentinel Dashboard 修改内容汇总
本文档对比了自有项目 sentinel-dashboard 与官方 Sentinel-1.8.6/sentinel-dashboard 的目录差异,将核心修改内容按功能模块划分,详细列出了变更逻辑与涉及的变更文件清单。
1. Nacos 规则持久化集成
修改逻辑:
官方原版 Dashboard 通过 SentinelApiClient 接口将规则直接推送到各个客户端节点的内存中,一旦客户端重启规则就会丢失。
自有项目将规则存储改造为 Nacos 持久化推拉模式:Dashboard 直接与 Nacos 交互读写规则,客户端通过监听 Nacos 实现规则的动态更新与持久化。
变更文件清单:
-
pom.xml:引入sentinel-datasource-nacos依赖(移除testscope),新增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.javasrc/main/java/com/alibaba/csp/sentinel/dashboard/controller/DegradeController.javasrc/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.javasrc/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.javaInMemDegradeRuleStore.javaInMemFlowRuleStore.javaInMemParamFlowRuleStore.javaInMemSystemRuleStore.java
-
-
src/main/webapp/resources/app/scripts/app.js:添加 HTTP 拦截器 (transformResponse),通过正则匹配,将接口返回 JSON 中的id/ruleId大整数转换为字符串格式,彻底解决前端精度丢失问题。
4. 集群管理优化与前端批量操作扩展
修改逻辑:
-
Bug 修复:修复了集群节点模式切换时偶发的
NullPointerException(NPE)。 - 集群配置扩展:前端及后端新增了更丰富的集群客户端配置能力。
- 批量添加规则:在前端流控和链路页面,新增了规则的“批量添加”交互功能,大幅提升了在大规模资源场景下的配置效率,并配有加载进度遮罩层。
变更文件清单:
-
src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java:增加对serverStateVO和getConnection()的判空逻辑,修复模式切换时的 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:(新增) 项目改造说明文档。