Dante Cloud (但丁,原 Eurynome Cloud) 是一款企业级微服务架构和服务能力开发平台,是采用领域驱动模型(DDD)设计思想的、全面拥抱 Spring Authorization Server 的、基于 OAuth2.1 协议的、支持智能电视、IoT等物联网设备认证的微服务架构。基于 Spring Authorization Server 1.2.1、Spring Boot 3.2.2、Spring Cloud 2023.0.0、Spring Cloud Tencent 1.13.0-2022.0.4、Spring Cloud Alibaba 2022.0.0.0、Nacos 2.3.0 等主流技术栈开发的多租户系统,遵循 SpringBoot 编程思想,高度模块化和可配置化。具备服务发现、配置、熔断、限流、降级、监控、多级缓存、分布式事务、工作流等功能。
Dante Cloud 一直秉承“简洁、高效、包容、务实”的理念,不会采取任何额外的手段来获取更多的 Star,绝对真实就像其产品一样。如果你认可和喜欢 Dante Cloud,请不要吝啬你的赞美,项目右上角点颗小星星。
说明
3.1.X 为 Dante Cloud 可用于生产的稳定版本。
因周边适配程度还不完善,所以基于 Spring Boot 3.2.X 和 Spring Cloud 2023.0.0 的分支代码,请谨慎选择!
分支名称 | 对应 Spring 生态版本 | 对应 JDK 版本 | 用途 | 现状 |
---|---|---|---|---|
master | Spring Boot 3.2 和 Spring Cloud 2023.0.0 | JDK 17 | 主要发布分支 | 可使用,但 Spring Cloud Alibaba、Tencent 等生态并为完全适配,部分功能受限 |
develop | Spring Boot 3.2 和 Spring Cloud 2023.0.0 | JDK 17 | Development 分支 | 新功能、ISSUE 均以此分支作为开发,发布后会 PR 至 master 分支。开发分支不保证可用 |
reactive-develop | Spring Boot 3.2 和 Spring Cloud 2023.0.0 | JDK 21 | 响应式 Development 分支 | 下一代响应式微服务版本开发分支。开发分支不保证可用 |
3.1.X | Spring Boot 3.1 和 Spring Cloud 2022.0.X | JDK 17 | Stable 代码分支 | 稳定可用版本分支,2024年5月,Spring Boot 3.3 发布后将会停止维护 |
2.7.X | Spring Boot 2.7 和 Spring Cloud 2021.0.X | JDK 8 | 历史代码分支 | 基于 Spring Boot 2.7 时代开发的代码分支,不再维护 |
spring-security-oauth2 | Spring Boot 2.6 和 Spring Cloud 2021.0.X | JDK 8 | 历史代码分支 | 基于原 Spring Security OAuth2 实现的微服务,因相关组件均不在维护,所以该版本不再维护 |
[1] 软件信息
- 软件组成
- 核心组件:https://gitee.com/herodotus/dante-engine(已上传中央库)
- 后端工程:https://gitee.com/dromara/dante-cloud
- 前端工程:https://gitee.com/herodotus/dante-cloud-ui
- 软件生态
- Dante Cloud Athena(Dante Cloud 单体版):https://gitee.com/herodotus/dante-cloud-athena
- Dante OSS (像 JPA 一样操作 OSS):https://gitee.com/herodotus/dante-oss
- 软件文档
- 官方文档:https://www.herodotus.cn
- 技术手册:
- 《Dante Cloud 及相关知识学习方法和学习路径的建议》
- 《OAuth 2 中的 Scope 与 Role 深度解析》
- 《Spring Boot 3 之自动配置与注入顺序控制》
- 《Spring Cloud 之 Session 共享及一致性处理》
- 《OAuth 2 中的鉴权和动态接口鉴权》
- 《Spring Boot 3 之 Rest 接口传参方式详解》
- 更多详情参见:https://www.herodotus.cn/cookbook/
[2] 本次更新内容
- 【主要更新】
- [升级] Spring Boot 版本升级至 3.1.8
- [升级] Spring Cloud Tencent 版本升级至 1.13.1-2022.0.4
- [升级] Spring Boot Admin 版本升级至 3.2.2
- [升级] Debezium 版本升级至 2.5
- [升级] Spring Authorization Server 版本升级至 1.1.4
- [升级] Nacos 版本升级至 2.3.0
- [优化] jetcache 的问题修复及优化。(PR by Kaiser_Li)
- 优化计数缓存签章,增加 maxTimes 作为默认值,简化了 counting 方法,一般情况下只需调用 counting(key)即可
- 修复 AbstractCountStampManager 中 counting(String identity, int maxTimes)调用报错的问题
- 优化 AbstractCountStampManager 中对次数的判断,大于 maxTimes 时都返回错误
- [回滚] Spring Cloud 版本降级至 2022.0.4
- [重构] 全面改用 Nacos V2 API,支持微服务流量监控数据持久化存储到 Influxdb 时序数据库,支持通过 Sentinel Dashboard 界面管理存储在 Nacos 中的流量控制配置。支持 Nacos 认证模式。可通过配置开启或关闭相关支持。注意:该版本仅适用于 Nacos 2.2.2 及以上版本。
- [发布] 基于 Sentinel 1.8.7 扩展改造的 Dante Sentinel Dashboard Docker 镜像已发布并上传至 Docker Hub。
- 【其它更新】
- [新增] 新增系统现有错误体系,发现未能识别的错误时,在日志中打印提醒功能。fix: #I8Q187
- [新增] 在线文档和项目 Readme 新增出厂安全测试说明
- [新增] 新增外部 Open Api 调用失败统一 Exception。
- [新增] 新增 Nacos API 登录单元测试
- [新增] 新增获取 Nacos 命名空间列表 Rest API 单元测试代码
- [新增] 新增 Nacos 配置历史 API 封装
- [新增] 新增 Nacos 命名空间 API 封装
- [新增] 新增 caffeine、jetcache、redis 缓存组件使用详细说明,文档路径:dante-engine/readme/plugins/cache/ 以及 各模块 Readme 说明(PR by Kaiser_Li)
- [重构] 代码适配 Hutool 6.0.0-M11
- [重构] 改用 SMS4J 作为系统短信发送组件,重构相关代码,增加 access-sdk-sms 模块,删除已有 SMS 相关所有代码模块
- [重构] 重构自定义 OAuth 2 授权模式代码,提取公共重复代码,去除 IDE 中代码重复提示。
- [重构] 重构自定义错误体系代码,去除 Feedback 类型多余的构造函数方法。fix:#I8PFQH
- [重构] Emqx 系统客户端状态转 ApplicationEvent 重构完成。支持系统主题订阅和 Webhook 两种模式。
- [重构] 重构 Nacos API 封装 SDK,改变原有登录逻辑及配置参数,适配最新的 2.2.2 以上版本 API。
- [回滚] 回滚 Spring Cloud 版本至 2022.0.4,以解决新版本 Spring Cloud 升级 Feign 版本导致的 Spring Cloud Tencent 版本不兼容问题
- [修复] 修复在不使用系统统一 Session 环境下,,单独调用接口特别是测试接口时,提示 Session 过期的问题。fix:#I8PZY1
- [修复] 临时去除 mybatis-plus 相关依赖,解决 mybatis-plus 与 Spring Boot 3.1.7 和 3.2.1 版本不兼容,启动抛出 Bean named 'ddlApplicationRunner' is expected to be of type 'org.springframework.boot.Runner' but was actually of type 'org.springframework.beans.factory.support.NullBean' 错误问题。fix: #I8QJ9V
- [修复] 修复前端 tsParticles 代码问题,导致整个前端无法运行问题
- [修复] 修复前端静态路由自动校验错误
- [修复] 修复前端提示,在 “module” 模式下无法读取 .eslintrc.js 问题
- [修复] 修复伴随 Spring Boot 版本,起的 Netty 版本升级,导致的 Spring Cloud Tencent 代码不兼容运行出错问题。
- [修复] 修复 Spring Cloud Tencent 配置逻辑问题,导致服务启动出现 `The bean 'restTemplateCustomizer', defined in class path resource [com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfiguration$RetryInterceptorAutoConfiguration.class] and overriding is disabled.`
- [修复] 排除所有 bcprov-jdk15on 依赖,彻底解决模拟 SmUtil 抛出 java.lang.NoClassDefFoundError: Could not initialize class org.dromara.hutool.crypto.bc.SmUtil 问题 fix: #I8WPZZ
- [修复] 修复 yml 中 @ 占位符编译时不会被替换问题
- [修复] sms4j 依赖 hutool 5.x 和 hutool 6.x crypto 国密SMUtil 模块放在一个工程中会产生冲突 fix: #I8W59R
- [修复] 升级hutool 版本至 6.0.0-M10 抛出 java.lang.NoClassDefFoundError: Could not initialize class org.dromara.hutool.crypto.bc.SmUtil fix: #I8W5AN
- [修复] Mybatis Plust 版本升级至 3.5.5,修复 Bean named 'ddlApplicationRunner' is expected to be of type 'org.springframework.boot.Runner' but was actually of type 'org.springframework.beans.factory.support.NullBean' 错误问题
- [修复] 修复自主封装 Sentinel Dashboard 配置持久化至 Nacos 不支持认证问题。fix: #I6HZJI
- [修复] 修复自定义错误体系中,自定义的非 HttpStatus 类型错误不生效问题。fix: #I8PFQK
- [修复] 修复自定义错误体系中,自定义类型错误,自动计算的错误码不正确问题。fix: #I8PFQP
- [修复] 修复自定义错误体系抛出“Cannot invoke "java.lang.Integer.intValue()" because the return value of ...” 错误问题。fix: I8PNJ0
- [修复] 修复核心 Controller 定义,返回字符串类型数据,数据设置错误导致不显示结果问题。fix: #I8PFV1
- [修复] 修复 Spring Authorization Server 客户端配置缺少 MacAlgorithm 类型相关加密算法错误 fix: #I8NWX5
- [修复] 修复前端 OAuth2Application Typescript 属性类型映射错误问题。fix: #I8NWXP
- [修复] 修复前端自定义 Datetime组件 v-close-popup 引入错误,在控制台抛出告警信息问题 fix: I8NWY8
- [修复] 增强前端登录页面响应式效果,修复在某些环境下登录框过窄的问题。fix: #I8NZMO
- [修复] 解决 Nacos API 封装 SDK 在最新版本环境下登录出错问题。
- [修复] 修复 Nacos 配置整体导入包错误
- [修复] 前端工程适配 Vite 5.0.0,修复 monorepo 模块编译时出现 “The CJS build of Vite's Node API is deprecated” 问题 fix: #I8HLU0
- [修复] 清除 Docker Profile 环境下原有的 Native 配置,解决在 Docker Profile 环境下编译错误问题。fix: #I8ICSZ
- [优化] 更正自定义错误体系中,Validation 校验失败抛出错误的错误类型和错误编码 fix: #I8PFQT
- [优化] 优化以 Spring Cloud Tencent 作为微服务基础设置的模式下日志输出内容
- [优化] 去除核心 Dependencies 中无用的依赖配置
- [优化] 优化 Cache 相关模块代码,修改部分包名、代码以及注解的使用,符合 Spring 规范的命名和使用方式
- [优化] 彻底清除系统中 facility 相关模块依赖的 bcpkix-jdk15on,解决 bcpkix 不同版本依赖冲突导致的前后端数据加密异常问题。fix: #I8XHFK
- [优化] 清除为临时解决 SMS4J 启动输出错误信息的相关配置
- [优化] 优化 Nacos API 返回值处理,支持错误信息返回
- [优化] 优化数据库初始化脚本
- [优化] 优化核心 Controller 定义,增加数组类型数据转换为统一响应实体 Result 支持。
- [优化] 优化前端 OAuth2 配置,增加选择 private_key_jwt 或 client_secret_jwt 模式时,加密算法选择的联动处理,防止错误选择。fix: #I8O0GD
- [优化] 优化基础 Controller result 方法定义,去除以 `ID` 作为类型的方法定义。规避重载方法类型判断不正确问题。
- [优化] 升级前端粒子效果组件版本,采用最新方式重新实现前端粒子显示,并更新粒子效果。fix: #I8NZOX
- [优化] 优化 message-sdk-mqtt 模块代码,明确入站、出站以及通道相关代码。增加系统统一通道定义类,便于后续其它模块集成使用。 fix: #I8IPWG
- [优化] 前端工程支持 ES 模块代码的编译生成,以及 ES 模块的加载。fix: #I8HLVI
- [优化] 去除所有 Native 相关 pom 配置,待 Spring Boot 后续版本统一进行 Native 处理。
- [升级] Dockerfile 基础镜像 bellsoft/liberica-openjdk-debian 版本升级至 17.0.9-11
- [升级] Dockerfile 镜像 herodotus/sentinel-dashboard 版本升级至 1.8.7
- [升级] minio docker 镜像版本升级至 RELEASE.2024-02-17T01-15-57Z
- [升级] 升级 Antisamy XSS 防护策略配置文件
- [升级] nacos 镜像版本升级至 v2.3.0
- [安全] 修复 Jayway JsonPath 安全漏洞(CVE-2023-51074) fix: #I8XWGJ
- [安全] 修复 CVE-2023-22102 未经身份验证的攻击者通过多个协议发送恶意请求,最终接管MySQL Protocol漏洞 fix: #I8T9LR
- 【依赖升级】
- [升级] antisamy 版本升级至 1.7.5
- [升级] zxing 版本升级至 3.5.3
- [升级] redisson 版本升级至 3.27.0
- [升级] minio 版本升级至 8.5.8
- [升级] aws-java-sdk-s3 版本升级至 1.12.661
- [升级] hutool 版本升级至 6.0.0-M11
- [升级] com.baidu.aip 版本升级至 4.16.18
- [升级] org.json 版本升级至 20240205
- [升级] okio 版本升级至 3.8.0
- [升级] influxdb-client 版本升级至 7.0.0
- [升级] fastjson 版本升级至 2.0.46
- [升级] sqlite-jdbc 版本升级至 3.45.1.0
- [升级] JetCache 版本升级至 2.7.5
- [升级] vue webjars 版本升级至 3.4.15
- [升级] alipay-sdk-java 版本升级至 4.38.200.ALL
- [升级] sms4j 版本升级至 3.1.1
- [升级] mysql-connector-j 版本升级至 8.3.0
- [升级] transmittable-thread-local 版本升级至 2.14.5
- [升级] mybatis-plus 版本升级至 3.5.5
- [升级] mybatis 版本升级至 3.5.15
- [升级] wxjava 版本升级至 4.6.0
- [升级] font-awesome webjars 版本升级至 6.5.1
- [升级] checker-qual 版本升级至 3.42.0
- [升级] guava 版本升级至 33.0.0-jre
- [升级] quasar webjars 版本升级至 2.14.0
- [升级] bcprov-jdk15to18 版本升级至 1.77
- [升级] bcprov-jdk18on 版本升级至 1.77
[3] Dante Cloud 特性
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 Server
Authorization 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 等相关代码,形成共享模块。
- 共享模块已进行优化配置,可编译成独立的组件,单独以组件形式进行发布。
- 代码以共享模块的方式进行单独维护开发,降低现有工程代码复杂度,便于后续功能的扩展和代码的复用。
欢迎 Star 一波来支持我们!
Gitee:https://gitee.com/dromara/dante-cloud
Github:https://github.com/dromara/dante-cloud