Dante Cloud (但丁,原 Eurynome Cloud) 是一款企业级微服务架构和服务能力开发平台,是采用领域驱动模型(DDD)设计思想的、全面拥抱 Spring Authorization Server 的、基于 OAuth2.1 协议的、支持智能电视、IoT等物联网设备认证的微服务架构。基于 Spring Authorization Server 1.1.3、Spring Boot 3.1.5、Spring Cloud 2022.0.4、Spring Cloud Tencent 1.12.3-2022.0.4、Spring Cloud Alibaba 2022.0.0.0、Nacos 2.2.4 等主流技术栈开发的多租户系统,遵循SpringBoot 编程思想,高度模块化和可配置化。具备服务发现、配置、熔断、限流、降级、监控、多级缓存、分布式事务、工作流等功能。
定位
- 构建成熟的、完善的、全面的,基于 OAuth2.1 的、前后端分离的微服务架构解决方案。
- 面向企业级应用和互联网应用设计开发,既兼顾传统项目的微服务化,又满足互联网应用开发建设、快速迭代的使用需求。
- 平台架构使用微服务领域及周边相关的各类新兴技术或主流技术进行建设,是帮助快速跨越架构技术选型、研究探索阶段的利器。
- 代码简洁规范、结构合理清晰,是新技术开发应用的典型的、综合性案例,助力开发人员对新兴技术的学习和掌握。
背景
这也是为什么做 Dante Cloud 的初衷:
- 一方面是以 Dante Cloud 为载体,潜移默化地将过往项目建设的经验教训融入其中,尽可能地帮助使用者规避或者减少无效工作,提升工作效率和质量,有跟多的时间做更有意义的事情;
- 另一方面不断地融合和使用各类新兴技术,帮助使用者尽可能多的了解、学习和运用新技术,让技术不再成为禁锢变为进步和提升的基石。
这也是为什么 Dante Cloud 与其它项目不同:
Dante Cloud 并不过分强调常规应用功能的堆叠与丰富化,因为作者认为纯开发工作仅占整个项目建设投入的 20%,减少开发投入、提升开发效率未必就能减少整个项目建设周期剩余80%工作投入。Dante Cloud 的远景目标是可以帮助使用者缩短整个项目的建设周期和减少无意义的工作投入,而不仅仅只是在开发效率方面的提升。
Dante Cloud 一直秉承“简洁、高效、包容、务实”的理念,不会采取任何额外的手段来获取更多的 Star,绝对真实就像其产品一样。如果你认可和喜欢 Dante Cloud,请不要吝啬你的赞美,项目右上角点颗小星星。
说明
因 Spring Boot 2.7.X 和 3.0.X 将分别于 2023年11月18日 和 2023年11月24日 停止维护,考虑到技术发展趋势,决定停止 Dante Cloud 2.7.X 版本代码的维护,专注 3.1.X 维护及 3.2.X 开发。2.7.16.Final 版本是 Dante Cloud 2.7.X 系列最后一个版本,代码仍旧会保留,可在工程 2.7.X 分支中获取。
本次更新内容
- 【主要更新】
- [升级] Spring Boot 版本升级至 3.1.5
- [升级] Spring Authorization Server 版本升级至 1.1.3
- [升级] Spring Cloud Tencent 版本升级至 1.12.3-2022.0.4
- [升级] Debezium 版本升级至 2.4
- [新增] 新增各类消息发送融合门面设计,以统一 API 支持系统集成的、包含 WebSocket、Application Event、Spring Cloud Stream、消息队列等各类消息的发送。解决给类消息组件发送方式、发送入口不一致、代码混杂、使用不方便等问题。fix: #I8BQZR
- [新增] 新增 Ip2Region 离线 IP 定位搜索支持模块,同时支持 IPV4 和 IpV6
- [升级] Camunda 版本升级至 7.20.0 正式版,兼容 Spring Boot 3 的正式版本。同步更新 Camunda OpenAPI 描述文件和 SQL 脚本。
- [升级] Antisamy 版本升级至 1.7.4,同步更新最新版本 Antisamy XSS 防护配置文件。
- [升级] Skywalking 相关组件版本升级至 9.0.0
- 【其他更新】
- [新增] 新增 Ip2Region 模块单元测试代码
- [新增] 新增 Dante Engine 统一 Testing Profile 配置,方便后续逐步增加单元测试用例及统一测试
- [修复] 修复 WebSocket 模块配置参数错误,引起多实例配置不生效,导致 WebSocket 服务多实例消息发送失败问题。fix: #I8BI3I
- [修复] 修复前端正常退出系统,WebSocket 抛出“你的主机中的软件中止了一个已建立的连接错误” fix: #I8BIMU
- [修复] 修复以 spring-boot-starter-parent 作为 Maven Parent 配置,在当前环境下依赖组件版本错误不会更新问题 fix: #I8BJAB
- [重构] 重构 WebSocket 消息发送及多实例消息同步代码,抽取独立 MessageTemplate 作为核心操作代码,规避多实例环境下消息循环发送问题。fix: #I8BIXI
- [重构] 抽象策略事件统一发送方法,减少事件发送方法的反复调用。fix: #I8BLD5
- [重构] 重构 Security 已有职能定位相关核心代码及模块,合并至统一 OAuth2 资源服务器自动配置模块,提升代码内聚性和模块间依赖逻辑性,减少不合理或重复性依赖关系。fix: #I8BQ94
- [重构] 重构 OAuth2 授权服务器相关核心代码及模块,合并至统一 模块中,提升代码内聚性和模块间依赖逻辑性,减少不合理或重复性依赖关系。fix: #I8BQJI
- [重构] 重构外部接入 RestApi 定义。
- [优化] 优化 Spring Cloud Stream 代码配置,以更优的方式解决单体版环境下 Stream 自启动连接消息队列问题。fix: #I8BKBK
- [优化] 优化 Maven 相关配置,支持 release 和 milestore 等多源包的下载
- [优化] 优化统一 dependencies,尽量使用 Spring Boot 版本依赖,去除重复的 maven 配置。
- [优化] 优化自定义 OAuth2 Provider 日志输出,与 SAS 标准代码统一
- [修复] 修复 IDEA 和 Maven 3.9.5 环境下,Spring 生态模块版本不一致问题
- [安全] 升级 org.json 版本,去除 baidu java sdk 依赖的低版本 org.json 携带的 CVE 漏洞。
- [升级] Apache Maven 版本支持 3.9.5
- [升级] minio docker 镜像版本升级至 RELEASE.2023-10-25T06-33-25Z
- 【依赖更新】
- [升级] guava 版本升级至 32.1.3-jre
- [升级] mybatis plus 版本升级至 3.5.4
- [升级] mdi__font webjars 版本升级至 7.3.67
- [升级] vue webjars 版本升级至 3.3.6
- [升级] commons-io 版本升级至 2.15.0
- [升级] redisson 版本升级至 3.24.3
- [升级] aws-java-sdk-s3 版本升级至 1.12.576
- [升级] okhttps 版本升级至 4.0.2
- [升级] alipay-sdk-java 版本升级至 4.38.111.ALL
- [升级] tencentcloud-sdk-java-sms 版本升级至 3.1.893
- [升级] xnio 版本升级至 3.8.12.Final
- [升级] fastjson2 版本升级至 2.0.41
- [升级] hutool 版本升级至 6.0.0-M7
- [升级] sqlite-jdbc 版本升级至 3.43.2.1
- [升级] org.json 版本升级至 20231013
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 等相关代码,形成共享模块。
- 共享模块已进行优化配置,可编译成独立的组件,单独以组件形式进行发布。
- 代码以共享模块的方式进行单独维护开发,降低现有工程代码复杂度,便于后续功能的扩展和代码的复用。
还没有评论,来说两句吧...