Dante Cloud 是一款企业级微服务架构和服务能力开发平台,是全面拥抱 Spring Authorization Server 的、基于 OAuth2.1 协议的微服务架构。基于 Spring Authorization Server 1.0.0、Spring Boot 3.0.0、Spring Cloud 2022.0.0、Spring Cloud Tencent 1.8.2-2022.0.0、Spring Cloud Alibaba 2021.0.4.0、Nacos 2.2.0 等主流技术栈开发的多租户系统,遵循 SpringBoot 编程思想,高度模块化和可配置化。具备服务发现、配置、熔断、限流、降级、监控、多级缓存、分布式事务、工作流等功能
平台定位
- 构建成熟的、完善的、全面的,基于 OAuth2.1 的、前后端分离的微服务架构解决方案。
- 面向企业级应用和互联网应用设计开发,既兼顾传统项目的微服务化,又满足互联网应用开发建设、快速迭代的使用需求。
- 平台架构使用微服务领域及周边相关的各类新兴技术或主流技术进行建设,是帮助快速跨越架构技术选型、研究探索阶段的利器。
- 代码简洁规范、结构合理清晰,是新技术开发应用的典型的、综合性案例,助力开发人员对新兴技术的学习和掌握。
发布背景
自11月24日,Spring Boot 3.0 以及 Spring Cloud 2022.0.0、Spring Cloud Tencent 等全新版本发布,整个Java 社区也步入的 Java 17 和 Spring Boot 3 的新时代。紧跟 Java 技术和 Spring 社区的发展,让更多质量更好、性能更优的新特性服务于实际的开发工作,Dante Cloud 也同步进行升级及适配,开发了全新的 3.0 版本。
[1] Dante Cloud 3.0.0 新特性
- 核心基础依赖便捷切换
- 新增
Spring Cloud Tencent
和Spring Cloud
原生微服务全家桶等两种基础设施支持。 - 新增
Spring Cloud Alibaba
、Spring Cloud Tencent
和Spring Cloud
原生微服务全家桶三种基础设值切换能力,可以以相对便捷的方式切换使用 Alibaba、Tencent、Spring 等基础设施环境。可根据自身实际需求选择,不再局限于只能在某一种基础设施环境中运行。
- 支持
GraalVM
原生镜像
- 整体调整各类模块 pom build 配置,适当增加冗余重复配置,以支持
Spring Native
或GraalVM
编译需要。规避对所有模块进行 Native 编译,而导致错误问题。
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 Security
权限注解以及权限方法,即可实现接口鉴权以及权限的动态修改。采用分布式鉴权方案,规避 Gateway 统一鉴权的压力以及重复鉴权问题 - OAuth2 UserDetails 核心数据支持直连数据库获取和 Feign 远程调用两种模式。OAuth2 直连数据库模式性能更优,Feign 访问远程调用可扩展性更强。可通过配置动态修改采用策略方式。
- 基于自定义 Session,混合国密
SM2
(非对称) 和SM4
(对称加密) 算法,实现基于数字信封技术的秘钥动态生成加密传输。利用 “一人一码机制”,实现密码模式登录数据进行动态加密传输。配合 OAuth2 Client 验证,保护接口调用和前后端数据传输的合理性及安全性。
- 采用
pnpm monorepo
重构前端
- 前端工程包管理器变更为 pnpm。
- 采用
monorepo
模式对前端工程进行重构,抽取 utils、components、apis、bpmn-designer 等相关代码,形成共享模块 - 共享模块已进行优化配置,利用 Vite 可编译成独立的组件,单独以组件形式进行发布
- 代码以共享模块的方式进行单独维护开发,降低现有工程代码复杂度,便于后续功能的扩展和代码的复用。
[2] 升级说明
- 当前版本虽然仍旧集成了 Spring Cloud Alibaba,但目前仅能使用 Nacos 的配置中心功能,同时配合 Zookeeper 作为服务发现和注册使用。Sentinel 等相关功能暂时无法使用。建议现阶段先使用 Spring Cloud Tencent 作为基础设施支撑环境。
待 Spring Cloud Alibaba 完成适配,Dante Cloud 会马上进行更新升级。
- 因 Spring Boot 3 周边内容全部成熟和适配还需要一段时间,所以 2.7.X 将继续维护。想要体验最新的 3.0.0 版本,请检出 3.0.0 分支代码。
[3] 详细更新内容
- 重要更新
- Spring Boot 版本升级至 3.0.0
- Spring Cloud 版本升级至 2022.0.0
- Spring Authorization Server 版本升级至 1.0.0
- Spring Cloud Tencent 版本恒机制 1.8.2-2022.0.0
- Spring Boot Admin 版本升级至 3.0.0-M6
- Spring Doc 版本升级至 2.0.1
- 其它更新
- [重构] 根据新版 Spring Authorization Server 代码结构及类命名,对 Spring Authorization Server 相关代码进行重构适配。
- [重构] OAuth2 Application 实体类增加 authorization code time-to-live 字段。
- [重构] OAuth2 Application 中 accessTokenTimeToLive、refreshTokenTimeToLive、authorizationCodeTimeToLive 属性的默认值,修改为与 Spring Authorization Server TokenSettings 一致。
- [重构] 重构 Spring Authorization Server OAuth2 相关代码分包和模块结构,逻辑更内聚、职责更清晰、模块引用依赖更简洁
- [重构] 使用 SpringSecurity 6 最新代码逻辑,重新实现接口鉴权。
- [重构] 重构基于 Redis 的微服务 Session 共享配置代码,采用更合理的配置实现分布式微服务 Session 共享
- [新增] 新增 Token Settings 授权码模式 Code 有效时间字段。
- [新增] 在 Nacos 中增加 logback 配置,新增服务可外部化动态读取 logback.xml 配置模式。以便于更加灵活的进行日志输出配置。
- [新增] 外部配置 logback.xml 中,增加 Skywalking 日志上报、ELK 日志中心日志收集、Skywalking TraceId 等支持。同时提供常规及 MDC 两种配置。
- [新增] 在统一响应实体 Result 增加 TraceId 信息,在开启 Skywalking Tracing 的情况下,可在返回结果中,统一增加 TraceId,方便跟踪和调试。
- [变更] 服务注册临时改为使用 zookeeper。
- [变更] 数据库初始化脚本中的初始数据,与 Spring Authorization Server 0.4.0 最新代码适配
- [变更] 默认 JDK 版本及 pom.xml 中 <java.version> 指定为变更为 JDK 17。
- [变更] Docker 默认 JDK 基础镜像变更为 JDK 17。
- [变更] spring.factories 全部替换为新版格式并启用 @AutoConfiguration。原有 ...AutoConfiguration形式命名配置类,变更为...Configuration形式命名。
- [变更] 取消自定义登录页面中使用 Thymeleaf 内置 Reqeust、Session 对象,改用 Model 方式进行传递。
- [变更] 适配新版本依赖注解引用及代码用法
- [变更] 删除 Knife4j 相关依赖,后续版本不再提供 Knife4j API 支持。
- [变更] 不再提供 docker-maven-plugin 支持,去除相关配置
- [修复] 使用 Feign 调用接口时,上游接口 content_type 会传递至下游,错误的 content_type 导致下游接口调用出错问题。
- [修复] 在 3.0.0 环境下,Thymeleaf 不再支持 Request、Session 对象调用,导致自定义 Spring Authorization Server 登录页面解析错误
- [修复] OpenFeign 使用 OkHttp 做基础请求组件时,启动服务抛出对象无法注入错误问题。
- [优化] 优化 git-commit-id 配置,变更为只在服务类型模块中生成相关信息,提升主工程编译速度
- [优化] 优化 dependencies 及 pom 配置,去除冗余重复配置,降低 maven 内容的重复化配置。减少不必要的 Maven 插件配置,提升工程代码整体编译效率
- [优化] 整体调整各类模块 pom build 配置,适当增加冗余重复配置,以支持 Spring Native 编译需要。规避对所有模块进行 Native 编译产生错误问题。
- 配置变更
- javax 属性节点全部变更为 jakarta
- spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults 值修改为 true
- org.hibernate.dialect.PostgreSQL10Dialect 变更为 org.hibernate.dialect.PostgreSQLDialect
- Redis 相关配置全部移动到 data 属性节点下
- 依赖升级
- [升级] Nacos 版本升级至 2.2.0
- [升级] wxjava 版本升级至 4.4.6.B
- [升级] antisamy 版本升级至 1.7.2
- [升级] redisson 版本升级至 3.19.0
- [升级] minio 版本升级至 8.4.6
- [升级] fastjson2 版本升级至 2.0.21
- [升级] Hutool 版本升级至 5.8.10
- [升级] tencentcloud-sdk-java-sms 版本升级至 3.1.650
- [升级] dysmsapi20170525 版本升级至 2.0.23
- [升级] alipay-sdk-java 版本升级至 4.35.7.ALL
- [升级] aliyun-java-sdk-core 版本升级至 4.6.3
- [升级] qiniu-java-sdk 版本升级至 7.12.1
- [升级] aliyun-java-sdk-green 版本升级至 3.6.6
- [升级] postgresql 版本升级至 42.5.1
- [升级] jackson 版本升级至 2.14.1
- [升级] jasypt-spring-boot-starter 版本升级至 3.0.5