Dante Cloud 是一款企业级微服务架构和服务能力开发平台,是采用领域驱动模型(DDD)设计思想的、全面拥抱 Spring Authorization Server 的、基于 OAuth2.1 协议的微服务架构。基于 Spring Authorization Server 1.0.1、Spring Boot 3.0.4、Spring Cloud 2022.0.1、Spring Cloud Tencent 1.10.0-2022.0.1、Spring Cloud Alibaba 2022.0.0.0-RC1、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] 本次更新内容
基于 SAS 的动态接口权限全新改版
不再直接使用接口作为权限数据,提取接口数据单独管理,额外增加权限层,支持同一权限配置多个接口。
用户权限 和 OAuth2 Scope 权限,均已支持同一权限配置多个接口。提升权限配置和使用的便捷性,同时解决以接口作为权限导致 Token 过大过长问题。
全面支持 Ant 风格 REST 接口转权限数据校验,支持静态配置权限与动态权限重叠冲突检查,包括通配符及占位符形式接口重叠冲突检查。
权限重叠冲突检查会自动选取最大匹配规则作为鉴权元数据。例如:静态权限 /message/** 和动态权限 /message/send 重叠,会自动选取 /message/** 作为鉴权元数据。
无须重启服务、修改代码,支持在系统后台修改表达式权限,动态变更接口访问控制权限。
结合最新版本 Spring Authorization Server 和 Spring Security,重新梳理当前支持动态表达式权限,去除冗余、重复以及不再支持的表达式。目前支持的表达式动态表达式权限包括:permitAll, anonymous, rememberMe, denyAll, authenticated, fullyAuthenticated
极大地简化了接口数据汇总、权限转换、重叠冲突校验、权限分发等核心权限代码逻辑。
重要更新
[升级] Spring Boot 版本升级至 3.0.4
[升级] Spring Cloud Tencent 版本升级至 1.10.0-2022.0.1
[升级] Spring Boot Admin 版本升级至 3.0.1
其它更新
[安全] 强制升级 commons-fileupload 版本至 1.5 ,修复 CVE-2023-24998 安全漏洞
[重构] 结合各模块组件的职责及定位,重新划分和调整部分模块的归属。
[重构] 原 dante-cloud-upms-logic 和 dante-cloud-upms-rest 代码调整至 dante-engine,后续以组件形式调用。
[重构] 原 dante-module-upms-logic 和 dante-module-upms-rest 模块,名称分别变更为 dante-module-social 和 dante-module-metadata,职责和用途更加清晰
[重构] 重新定义系统部分管理功能接口路径,增加统一标识方便查看及接口管理操作。
[优化] 优化多级缓存 Key 生成逻辑,解决原有以 JSON 格式作为缓存 Key,导致缓存数据在可视化工具中查看混乱问题。
[优化] 前端主要管理功能配合新版动态权限同步优化
[修复] 新增在服务多实例情况下,多级缓存权限数据本地同步支持。解决在同一消费组下,未能消费到数据的服务实例校验权限错误问题。
[修复] 彻底解决初次搭建过程中因操作步骤错误,产生冗余缓存数据,会出现 Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 错误问题
依赖更新
[升级] springdoc 版本升级至 2.0.4
[升级] fastjson2 版本升级至 2.0.25
[升级] hutool 版本升级至 5.8.15
[升级] wxjava 版本升级至 4.4.9.B
[升级] mybatis 版本升级至 3.5.12
[升级] tencentcloud-sdk-java-sms 版本升级至 3.1.712
[升级] alipay-sdk-java 版本升级至 4.35.71.ALL
升级说明
本次更新存在破坏性更新,设计数据模型变化,升级前强烈建议备份数据。如果不是全新部署,注意重启前清空 Redis 缓存。
[2] Dante Cloud 3.0.0 后端新特性
1. 核心基础依赖便捷切换
新增 Spring Cloud Tencent 和 Spring Cloud 原生微服务全家桶等两种基础设施支持。
新增 Spring Cloud Alibaba、Spring Cloud Tencent 和 Spring Cloud 原生微服务全家桶三种基础设值切换能力,可以以相对便捷的方式切换使用 Alibaba、Tencent、Spring 等基础设施环境。可根据自身实际需求选择,不再局限于只能在某一种基础设施环境中运行。
2. 支持 GraalVM 原生镜像
整体调整各类模块 pom build 配置,适当增加冗余重复配置,以支持 Spring Native 或 GraalVM 编译需要。规避对所有模块进行 Native 编译,而导致错误问题。
3. 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 验证,保护接口调用和前后端数据传输的合理性及安全性。
[3] Dante Cloud 3.0.0 前端新特性
采用 pnpm monorepo 重构前端
前端工程包管理器变更为 pnpm。
采用 monorepo 模式对前端工程进行重构,抽取 utils、components、apis、bpmn-designer 等相关代码,形成共享模块
共享模块已进行优化配置,利用 Vite 可编译成独立的组件,单独以组件形式进行发布
代码以共享模块的方式进行单独维护开发,降低现有工程代码复杂度,便于后续功能的扩展和代码的复用。