功能特性
2026/3/12大约 15 分钟前期准备开发环境基础知识
[一]Dante Cloud 4.0.X 版本
[1]功能特性
1.基础依赖全面升级
- Dante Cloud 4.X 使用 JDK 版本已经全面升级至 25,充分发挥虚拟线程的能力
- Spring Boot 版本升级至 4.0.3
- Spring Cloud 版本升级至 2025.1.1
- Spring Cloud Alibaba 版本升级至 2025.1.0.0
- 全面迁移至 Jackson 3,提升序列化/反序列化性能与安全性
2.全新模块架构
- 基于 Spring Boot 4 “New Moduler Design” 体系,重构整个核心组件库模块,适配新体系下的模块划分和使用,进一步强化模块的内聚性和独立使用能力
- 工程 maven dependencies 体系,由原来“继承”模式变更为
import模式,增强工程的独立性以及模块引入的便捷性,避免在多工程场景下各个工程只能串行使用效率低下问题
3.API 版本控制
- 新增 REST API 版本控制能力,支持请求头、请求路径和请求参数三种 API 版本设置模式,可通过配置修改。默认已开启基于请求头的版本控制。
- 新增支持带 API 版本的 REST 接口动态接口鉴权能力,接口权限实时在线变更,不同版本接口可独立设置不同权限
4.改进 gRPC 通信
- 使用 Spring gRPC 组件替换原有 net.devh grpc-srping-boot-starter,并扩展 gRPC 的动态服务发现能力,让 gRPC 与系统的融合更加成体系化
- 新增基于 Spring Security 的 gRPC 方法动态鉴权能力,与 REST 接口权限体系保持一致,让 gRPC 通信更加安全
5.安全防护增强
- 全新实现 PKI 证书管理模块,支持在线生成与管理,无需使用传统命令行方式生成和管理证书
- 系统基于 Spring Authorization Server 的授权服务器加密逻辑,全部修改为使用系统 PKI 模块生成证书
- 改造 Spring Boot Admin 监控服务,增加登陆认证保护。使用 Dante Cloud 系统自身提供的 OAuth2 / OIDC 作为 Spring Boot Admin 主要的登录模式
- 新增静态接口权限 Customizer 聚合模式,服务可根据实际依赖模块
按需、动态装配静态接口权限,减少静态权限的重复设置和不必要的解析,进一步提升接口鉴权效率 - 服务 Docker 镜像基础 JDK 修改为 liberica 加固镜像,以提升镜像整体安全性及性能
6.OSS对象存储
- 原 Dante OSS 工程已经停止维护,使用 AWS S3 V2 权限实现 OSS 管理模块,并合并至核心组件库
- 支持在线生成与管理,基于 AWS S3 V2 API 能够提供的能力,全新实现前端对象存储管理功能
- 重构本地文件存储和远程文件存储多层文件管理逻辑,让代码逻辑更清晰、运行更稳定、配置修改,也更容易理解和维护。
7.前端功能改进
- 基于 Vuetify Material Design 3 蓝图风格以及 Vue 3 组合式 API,全新编写新版管理界面
- 采用 monorepo 模块化设计,原版前端(Quasar版)和前端新版(Vuetify版),共享通用化代码模块,提升代码维护的便捷性
- 前端菜单权限大幅调整,支持根据多角色动态获取菜单。
- 支持多类型动态菜单,个人页面菜单从静态化菜单变更为支持动态化配置管理
- 大幅提升前端代码 Tree shaking 能力和性能
- 前端组件库模块新增组件 Resolver 支持,方便 IDE 更好的识别组件及其定义
8.其它改进提升
- Dante Cloud 主工程也支持中央仓库和 Maven 私库发布,服务的开发和代码组织可以更灵活
- 使用更优雅及更合理的方式重构自定义 JPA 二级缓存实现,彻底解决需要修改 Hibernate 源代码的问题
- 优化平台和服务配置,按照 Servlet 和 Reactive 不同环境需求进行拆分,以增强不同运行环境配置的独立性
- 重构本地文件存储及服务间文件传输体系,简化代码逻辑,清晰化代码定位,便于理解和维护
- 重构基础 Service 和 Controller 定义,在原有 Spring Data 实体绑定基础上,支持 DTO 类型请求和响应实体。同时支持 Spring Data Page 和 Slice 两种分页场景
[2]注意事项
- 因为全新架构了核心组件库中的模块,核心模块坐标已统一变更为 org.dromara.dante(企业版保持不变),建议全新检出代码,避免因模块结构调整导致冲突
- 数据库和 Nacos 配置等,也存在较多的变化,与之前版本无法兼容,要使用新版本建议重新建库和导入配置文件。
- 若通过 ZIP 方式导出代码,需注释 git-commit-id-maven-plugin,否则编译会因缺少 .git 文件夹报错。建议通过 Git 克隆代码以保留版本记录功能
[二]Dante Cloud 3.3.X 版本
[1]新特性
Spring Boot已升级至 3.3.0Spring Authorization Server已升级至 1.3.0- 全面采用 Java 21,默认开启虚拟线程,以改善阻塞操作的处理降低系统资源的消耗
- 支持传统的
阻塞式微服务与基于Reactor和WebFlux的响应式微服务同时运行在一套系统之中 - 不强制使用
响应式方式开发,可根据自身项目对资源吞吐量、资源消耗、特殊功能性能保障的需求,灵活的选择是采用响应式还是阻塞式来开发对应的服务。 - 在保持 Dante Cloud 原有
Spring Authorization Server深度扩展的各种特性的前提下,实现响应式服务的动态鉴权与现有体系的完全融合(无需在代码中使用@PreAuthorize写死权限,全部通过后台动态管理) - 向“响应式编程”转变,基于
Reactor重构大量核心代码,进一步提升本系统代码质量和运行效能 - 重新架构所有核心组件模块,进一步降低各模块的耦合性,减少第三方组件依赖深度,简化各模块使用的复杂度,使用更贴近 Spring Boot 生态官方写法,提升模块组件的可插拔性以及
响应式和阻塞式不同环境下自动配置的适配能力 - 实现
响应式和阻塞式不同类型服务,Session 共享体系以及自定义 Session 体系的完美融合(谁说微服务就一定用不到 Session :))。 - 新增
GRPC服务间调用和通信方式,系统核心服务间调用支持OpenFeign和GRPC两种方式,可通过修改配置实现两种方式的切换。 - 基于
RSocket全面重写WebSocket消息系统,实现WebSocket的响应式改造以及RSocket与 Spring Security 体系的全面集成。支持多实例、跨服务的私信和广播 - 新增 OAuth2 独立客户端,可用于客户端动态注册以及授权码模式
- 新增基于
Loki + Grafana生态的轻量级日志中心和链路追踪解决方案,使用 OSS 作为数据存储,极大地降低资源需求,可作为原有 Skywalking 和 ELK 重量级体系的备选方案,根据实际需要切换。 - 开放纯手写动态表单功能。可实现BPMN、动态表单、Camunda 流程引擎的串联,实现工作流程运转(目前仅支持简单工作流)
- 开放包含自定义属性面板的 BPMN 在线设计器功能。
- 开放物联网设备认证和管理模块,支持基于 Emqx 的物联网设备通信和管理。
- 开放阿里云内容审核、百度 OCR、环信、Emqx、天眼查、Nacos、PolarisMash等第三方 OpenApi 封装模块
- 前端工程支持 Docker 运行,相关参数可通过配置环境变量修改。已上传至 Docker Hub,可以直接下载运行。
[2]设计答疑
1. 为什么不做“纯血”响应式
响应式固然有其优势所在,但是使用响应式也不得面对一些现实问题:
- 要做纯血响应式,首先要有生态的保证。目前响应式的接受度还并不是很高,很多组件还都不支持响应式。除非有精力将所有用到的不支持的组件改写一遍,否则很难做到纯血,特别是对于微服务系统来说。
- 绝大多数应用都是需要使用数据库的,Java 领域现有的 orm 组件,要么不支持响应式(比如 JPA)、要么支持的不是特别好(比如 Hibernate)、要么需要自己编写的内容太多(比如 R2DBC),所以从投入产出比的角度说目前在数据层面做响应式并不“划算”
所以,还是要具体看应用系统的类型,在条件不具备的情况下没有必要做到纯血响应式。
2. 响应式可以带来哪些好处
响应式对阻塞式的好处,网上有大把的文章介绍,具体就不赘述了。对于实际应用中比较明显的优势:
响应式资源的利用效能更高,对于高资源消耗的功能,响应式的优势更突出- 微服务系统往往会需要集成更多内容,特别在数据层面,可能会存在同时使用多种类型数据存储以及数据的流转和迁移,常规事件驱动与响应式的“流”式思维比传统阻塞式更为契合。
- 响应式可以与事件驱动更好的配合。在 Spring 生态中在多个方面都大量使用了事件驱动,而响应式的核心设计思想也与事件驱动殊途同归。
正因为 Dante Cloud 用了很多 Spring Integration 的内容,传统阻塞式方式越用越别扭,才越来越觉得有必要做响应式支持。如果有时间可以好好看看 Spring Integration,也许会为你打开一个新的世界。
3. 学习响应式编程有哪些难点
- 如果基于 Reactor 学习响应式编程,难点和突破点就在于
Flux和Mono两个类。把这两个类的方法用透、弄明白,基本上就可以消除所有开发阻碍了。 - 响应式编程最大的难点就是编程思维的转换,因为习惯了阻塞式编程,一时会很难适应
响应式的流式开发思维
世上无难事只怕有心人
[三]Dante Cloud 3.0.X 特性
[1]核心基础依赖便捷切换
- 新增
Spring Cloud Tencent和Spring Cloud原生微服务全家桶等两种基础设施支持。 - 新增
Spring Cloud Alibaba、Spring Cloud Tencent和Spring Cloud原生微服务全家桶三种基础设值切换能力,可以以相对便捷的方式切换使用 Alibaba、Tencent、Spring 等基础设施环境。可根据自身实际需求选择,不再局限于只能在某一种基础设施环境中运行。
[2]Spring Authorization Server 全特性支持及扩展
- 基于
Spring Authorization Server和Spring Data JPA实现多租户系统架构, 支持 Database 和 Schema 两种模式。 - 基于
Spring Data JPA,重新构建Spring Authorization Server基础数据存储代码,替代原有 JDBC 数据访问方式,破除Spring Authorization Server原有数据存储局限,扩展为更符合实际应用的方式和设计。 - 基于
Spring Authorization Server,在 OAuth 2.1 规范基础之上,增加自定义Resource Ownership Password(密码) 认证模式,以兼容现有基于 OAuth 2 规范的、前后端分离的应用,支持Refresh Token的使用。 - 基于
Spring Authorization Server,在 OAuth 2.1 规范基础之上,增加自定义Social Credentials(社会化登录) 认证模式,支持手机短信验证码、微信小程序、基于JustAuth的第三方应用登录, 支持Refresh Token的使用。 - 扩展
Spring Authorization Server默认的Client Credentials模式,实现真正的使用 Scope 权限对接口进行验证。 增加客户端 Scope 的权限配置功能,并与已有的用户权限体系解耦 - 支持
Spring Authorization ServerAuthorization Code PKCE认证模式 - 在
Spring Authorization Server的标准的JWT Token加密校验方式外,支持基于自定义证书的JWT Token加密校验方式,可通过配置动态修改。 - 支持
Opaque Token(不透明令牌) 格式及校验方式,降低JWT Token被捕获解析的风险。可通过修改配置参数,设置默认 Token 格式是采用Opaque Token格式还是JWT Token格式。 - 全面支持
OpenID Connect(OIDC) 协议,系统使用时可根据使用需求,通过前端开关配置,快速切换 OIDC 模式和传统 OAuth2 模式 - 深度扩展
Authorization Code、Resource Ownership Password、Social Credentials几种模式,全面融合IdToken、Opaque Token、JWT Token与现有权限体系,同时提供IdToken和 自定义 Token 扩展两种无须二次请求的用户信息传递方式,减少用户信息的频繁请求。 - 自定义
Spring Authorization Server授权码模式登录认证页面和授权确认页面,授权码模式登录采用数据加密传输。支持多种验证码类型,暂不支持行为验证码。 - 新增基于
Spring Authorization Server的、支持智能电视、IoT等物联网设备认证模式 - 无须在代码中配置
Spring Security权限注解以及权限方法,即可实现接口鉴权以及权限的动态修改。采用分布式鉴权方案,规避 Gateway 统一鉴权的压力以及重复鉴权问题 - OAuth2 UserDetails 核心数据支持直连数据库获取和 Feign 远程调用两种模式。OAuth2 直连数据库模式性能更优,Feign 访问远程调用可扩展性更强。可通过配置动态修改采用策略方式。
[3]全体系化应用和开发特性集成
- 微服务架构全体系 Session 共享,实现 Spring Authorization Server、多实例服务、WebSocket、自定义 Session 以及大前端 Session 的统一。
微服务架构下的 Session 可以选择不用,但是不能没有。 - 混合国密
SM2(非对称) 和SM4(对称加密) 算法,实现基于数字信封技术的秘钥动态生成加密传输。利用“一人一码机制”,实现前后端数据进行动态加密传输与。Spring Authorization Server OAuth 2.1 授权模式深度融合,构建统一体系的数据传输加密。 - 全面整合
@PreAuthorize注解权限与URL权限,通过后端动态配置,无须在代码中配置Spring Security权限注解以及权限方法,可实现接口鉴权以及权限的统一管理和动态修改 - 融合 Spring Cloud Stream 和 WebSocket,以优雅的方式实现 WebSocket 服务多实例环境下,点对点、广播消息跨实例推送,在线用户实时统计,完美支持 WebSocket 集群化应用。
- 借鉴 JPA 标准化设计思想,提取和抽象 OSS 标准化操作,形成统一的 Java OSS API 规范。封装可操作任意厂商的、统一的 REST API,构建定义统一、动态实现的应用模式(类似于 Hibernate 是 JPA 的一种实现,Hibernate 以 Dialect 方式支持不同的数据库一样),在不修改代码的情况下通过修改配置实现 OSS 的无缝切换和迁移
- 自研基于
JetCache分布式两级缓存,完美实现 JPA Hibernate 二级缓存,支持各类查询数据缓存以及 JPA@ManyToMany,@ManyToOne等关联查询。完美解决 Spring Cache 仅使用本地缓存、创建 Key 繁琐和分页数据无法更新的问题。支持多实例服务本地缓存和远程缓存数据同步,同时支持 Mybatis Plus 二级缓存 - 平台统一错误处理,支持自定义错误码体系,有效集成
OAuth2、Spring Validation等多方错误体系并有机整合 HTTP 状态码。采用 Customizer 模式,采用错误码自动计算和创建模式,支持代码模块级错误码灵活定义扩展。响应结果更加多样灵活,反馈结果也更加人性化,便于理解和定位问题。 - 全体系 OkHttp 、HttpClient 统一化集成,实现 OkHttp 、HttpClient 与 RestTemplate 、Openfeign 一体化融合。统一使用 Feign 配置参数,对 OkHttp 、HttpClient 进行参数设定,可策略化选择设置使用 OkHttp 或 HttpClient 作为 RestTemplate 、Openfeign 统一的基础 HttpClient
[4]采用 pnpm monorepo 重构前端
- 未使用任何流行开源模版,使用全新技术栈,完全纯"手写"全新前端工程。
- 借鉴参考流行开源版本的使用和设计,新版前端界面风格和操作习惯尽量与当前流行方式统一。
- 充份使用 Typescript 语言特性,解决大量类型校验问题,尽可能规避 "any" 式的 Typescript 编程语言使用方式。
- 充份使用 Composition Api 和 Hooks 等 Vue3 框架新版特性进行代码编写。
- 充份利用 Component、Hooks 以及 Typescript 面向对象等特性,抽取通用组件和代码,尽可能降低工程重复代码。
- 对较多 Quasar 基础组件和应用功能组件进行封装,以方便代码的统一修改维护和开发使用。
- 对生产模式下,对基于 Vite3 的工程打包进行深度性能优化。
- 提供以 docker-compose 方式,对工程生产代码进行容器化打包和部署。
- 该版本基于 pnpm,采用 monorepo 模式对前端工程进行重构。构建 monorepo 版本前端,是为扩展更多功能、增加应用级功能做铺垫
- 抽取 utils、components、apis、bpmn-designer 等相关代码,形成共享模块。
- 共享模块已进行优化配置,可编译成独立的组件,单独以组件形式进行发布。
- 代码以共享模块的方式进行单独维护开发,降低现有工程代码复杂度,便于后续功能的扩展和代码的复用。
