Dante Cloud 是国内首个支持阻塞式和响应式融合的微服务。以「高质量代码、低安全漏洞」为核心,采用领域驱动模型(DDD)设计思想,完全基于 Spring 生态全域开源技术和 OAuth2.1 协议,支持智能电视、IoT等物联网设备认证,满足国家三级等保要求、支持接口国密数字信封加解密、防刷、高防XSS和SQL注入等一系列安全体系的多租户微服务解决方案。
理念
Dante Cloud 一直秉承着“简洁、高效、包容、务实”的理念,使用微服务领域及周边相关的各类新兴技术或主流技术进行建设,不断地深耕细作、去粗取精、用心打造。目标是构建一款`代码质量高、维护投入低、安全防护强`的,可以帮助用户快速跨越架构技术选型、技术研究探索阶段,降低传统项目中因安全漏洞、技术负债、低质代码等潜在隐患所产生的高维护投入,期望像项目名字寓意一样,在行业变革的时期承上启下,助力企业信息化建设和变革的产品。
定位
- 构建成熟的、完善的、全面的,基于 OAuth2.1 的、前后端分离的微服务架构解决方案。
- 面向企业级应用和互联网应用设计开发,既兼顾传统项目的微服务化,又满足互联网应用开发建设、快速迭代的使用需求。
- 平台架构使用微服务领域及周边相关的各类新兴技术或主流技术进行建设,是帮助快速跨越架构技术选型、研究探索阶段的利器。
- 代码简洁规范、结构合理清晰,是新技术开发应用的典型的、综合性案例,助力开发人员对新兴技术的学习和掌握。
[1] 软件信息
- 软件组成
- 软件生态
- Dante Cloud Athena(Dante Cloud 单体版):https://gitee.com/herodotus/dante-cloud-athena
- Dante OSS (像 JPA 一样操作 OSS):https://gitee.com/herodotus/dante-oss
- 软件文档
[2] 本次更新内容
- 【主要更新】
- [升级] Spring Boot 版本升级至 3.3.0
- [升级] Spring Cloud 版本升级至 2023.0.2
- [升级] Spring Authorization 版本升级至 1.3.0
- [升级] Spring Boot Admin 版本升级至 3.3.2
- [新增] 新增 Kafka 3 Docker Compose 配置,无需再额外 Zookeeper(如果要使用 Debezium,建议使用 Debezium 套件,这种情况下还需要启动 Zookeeper。目前还没有找到 Debezium Kafka 单点环境脱离 Zookeeper 的方案)
- [新增] 新增 opengauss 数据库支持
- [新增] 新增 Nacos 鉴权配置。系统默认在 Nacos 鉴权环境运行。
- [新增] 全新设计内置授权码模登录页面。
- [新增] 实现授权码模式登录页面数据加密传输体系与“一人一码”加密体系的统一。
- [新增] 新增忘记密码、用户注册页面的可定制化。配置了自定义忘记密码、用户注册页面,授权码模式页面会自动显示相关连接
- 【其它更新】
- [新增] 新增 NO_RESOURCE_FOUND_EXCEPTION 类型错误转换
- [重构] 重构多租户必要扩展 CurrentTenantIdentifierResolver 和 MultiTenantConnectionProvider 相关 Bean 注入方式。
- [修复] 修复redis密码为空字符串时,redisson创建报错的问题(感谢 Kaiser_Li 提交的 PR)
- [修复] 修复单独使用 data-spring-boot-starter组件,使用多租户模式启动报错。fix: #I9L61O (ISSUED by Kaiser_Li)
- [修复] 修复 Database 模式多租户,Hibernate 扩展配置信息注入不全问题
- [修复] 修复 Spring Authorization Server 自定义登录页面静态内容 webjars 加载错误
- [修复] 修复内置授权码登录页面,控制台抛错错误问题。
- [修复] 修复内置授权码登录页面脚本依赖模块丢失问题
- [修复] 修复日志代码引入类不规范问题。fix: #I9QR01
- [修复] 修复 Webjars JQuery 重复引入造成等登录页面单独访问无法加载问题。fix: #I9QRT0
- [修复] 修复授权码模式开启确认页面显示 401 无权限问题。fix: #I9QS1H
- [修复] 修复 Dante OSS 单独引入 Aliyun OSS 配置不会注入错误
- [修复] 修改POM 文件中插入异常字符导致结构错误问题
- [修复] 修复在新版本环境下,自定义数组转字符串反序列化错误,导致 OAuth2Application 管理操作失败。
- [优化] 优化 Spring Data 相关配置,采用最新配置替换已过时配置
- [优化] 优化数据加解密逻辑,在 session 不统一环境,加解密逻辑不执行直接返回原文。
- [优化] 明确抛错错误类型。新增 PlatformException 主要用于非 RuntimeException,确保 Exception 使用合理规范。
- [优化] 优化 ServiceContextHolderBuilder 配置,减少在为必要环境必须要注入配置问题
- [优化] 优化 Stamp Exception,统一修改为 Exception 类型。
- [优化] 代码适配 Hutool 6.0.0-M13
- [优化] 优化自定义 Spring Authorization Server 授权确认页面。选择了对应的 Scope 后,确认按钮才显示为可用状态。
- [优化] 去除无用的 Webjars 依赖
- [优化] 优化 JetCache 改为 Bom Import 模式
- [优化] 优化 Hutool 改为 Bom Import 模式
- [优化] 补充 Spring Authorization Server 新增认证模式以及客户端授权方法
- [升级] minio docker 镜像版本升级至 RELEASE.2024-06-11T03-13-30Z
- [升级] 封装的 Sentinel Dashboard 镜像版本升级至 1.8.8
- 【依赖更新】
- [升级] aws-java-sdk-s3 版本升级至 1.12.741
- [升级] mybatis-plus-boot-starter 版本升级至 3.5.7
- [升级] mybatis-plus-generator 版本升级至 3.5.7
- [升级] alipay-sdk-java 版本升级至 4.39.99.ALL
- [升级] sweetalert2 版本升级至 11.11.1
- [升级] guava 版本升级至 33.2.1-jre
- [升级] jetcache 版本升级至 2.7.6
- [升级] fastjson2 版本升级至 2.0.51
- [升级] alipay-sdk-java 版本升级至 4.39.95.ALL
- [升级] checker-qual 版本升级至 3.44.0
- [升级] redisson 版本升级至 3.31.0
- [升级] hutool 5.X 版本升级至 5.8.28
- [升级] hutool 版本升级至 6.0.0-M13
- [升级] com.baidu.aip 版本升级至 4.16.19
- [升级] sqlite-jdbc 版本升级至 3.46.0.0
- [升级] vue webjars 版本升级至 3.4.27
- [升级] xnio 版本升级至 3.8.15.Final
- [升级] influxdb-client 版本升级至 7.1.0
- [升级] quasar webjars 版本升级至 2.16.4
- [升级] font-awesome webjars 版本升级至 6.5.2
- [升级] mysql 版本升级至 8.4.0
- [升级] maven-gpg-plugin 版本升级至 3.2.4
- [升级] sms4j-spring-boot-starter 版本升级至 3.2.1
[3] Dante Cloud 响应式版本特性
- 全面采用 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,可以直接下载运行。
[4] 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
免责声明:本文系转载,版权归原作者所有;旨在传递信息,不代表一休教程网的观点和立场。