还记得那年,“天问”携“祝融”成功落火么?也就是同一天,2021年5月15日,Dante Cloud 微服务项目正式开源。
Dante Cloud 一直秉承着“简洁、高效、包容、务实”的理念,使用微服务领域及周边相关的各类新兴技术或主流技术进行建设,不断地深耕细作、去粗取精、用心打造。目标是构建一款代码质量高、维护投入低、安全防护强
的,可以帮助用户快速跨越架构技术选型、技术研究探索阶段,降低传统项目中因安全漏洞、技术负债、低质代码等潜在隐患所产生的高维护投入,期望像项目名字寓意一样,在行业变革的时期承上启下,助力企业信息化建设和变革的产品。
从项目开源至今,一路磕磕绊绊、摸着石头过河,不经意间也走过了两度春秋。期间有欢乐也有苦涩,有抹黑也有认可,更收获了一批热爱技术、尊重开源、支持Dante的朋友。也正因为你们的存在,给予我坚持走下去的勇气和动力。
总结过往,走向未来!
[一] Dante Cloud 大事记
- 2021.05.15 Dante Cloud 正式开源
- 2021.08.04 完成软件著作权登记
- 2022.02.10 对 Dante Cloud 来了一次“庖丁解牛”,拆解出 Dante Engine 组件库出,为从 Spring Security OAuth2 迁移至 Spring Authorization Server 做前序铺垫。
- 2022.05.20 首个基于 Spring Authorization Server 的、全新架构的 Dante Cloud 版本发布
- 2022.07.01 基于 Vue3、Vite2、Pinia、Quasar2、Typescript、Hooks 等最新技术栈全新构建前端工程正式发布
- 2022.07.30 正式加入 Dromara 开源社区,项目名称由 Eurynome Cloud 更名为 Dante Cloud
- 2022.08.15 Dante Cloud Star 数突破 1K。
- 2022.08.18 陆续迎来 Dante Cloud 首批 Committer (狂练胸肌李大懒、jokeway、未来、Looo、我问这瓜保熟吗、Ymind、tao), 感谢有你,作者从此不再孤单。
- 2022.10.08 基于 pnpm 的 monorepo 模式新版前端上线
- 2022.12.20 发布首个适配 Spring Boot 3 的正式版。
- 2023.04.12 Dante Cloud Star 数突破 1.5K。
- 2023.05.25 全新适配 Spring Boot 3.1.0,开源两周年纪念版本发布
[二] 版本更新内容
【主要更新】
- [升级] Spring Boot 版本升级至 3.1.0
- [升级] Spring Security 版本升级至 6.1.0
- [升级] Spring Authorization Server 版本升级至 1.1.0
- [升级] Spring Cloud Alibaba 版本升级至 2022.0.0.0-RC2
- [升级] Spring Cloud Tencent 版本升级至 1.11.4-2022.0.1
- [升级] Spring Boot Admin 版本升级至 3.0.4
- [升级] Debezium 版本及相关基础设施版本升级至 2.2
- [新增] 新增支持智能电视、IOT 设备等输入受限设备的 Device Flow 认证模式
- [新增] 新增 Device Flow 认证系统内置页面
- [新增] 新增 IOT 产品、设备管理 SDK
- [重构] 重构 Jackson 全局配置以及相关自定义代码
- 不再使用 @Primary ObjectMapper Bean 的方式全局配置 Jackson。
- 改用更灵活的、支持扩展的 Customizer 方式全局配置 Jackson。
- 同时兼顾全局配置、yaml 配置和自定义扩展,支持模块代码独立设置 Jackson 参数。
- 解决原有配置方式,只能通过修改源代码进行配置变更,无法自定义扩展问题。
- 解决原有配置方式,导致 yaml 配置失效、Spring Boot Jackson 默认 Bean 不注入等问题。
【其它更新】
- [新增] 新增服务优雅停机支持
- [新增] 新增 Nacos Server Postgresql 数据源支持插件及数据库初始化脚本
- [新增] 新增 Webjars 支持,将内置页面引用的 JavaScript 和 CSS 全部改为 Webjars 方式引入,同时删除不必要的静态资源降低生成 jar 大小
- [新增] SQLite 数据库集成 JPA 和 p6spy 支持
- [新增] 新增多级缓存可按实体独立进行设置的机制。实体独立配置缓存,优先级高于全局统一配置
- [重构] 采用页面嵌入 Vue 方式,重构授权页面。同时兼容 Device Authorization 授权页面
- [重构] Jackson XSS 防护代码迁移至 rest-sdk-protect 模块,降低 XSS 相关代码耦合性。
- [重构] 部分重复代码、类似代码提取为公共方法或类
- [重构] 重构统一错误体系代码,统一使用 FeedbackFactory 管理自定义错误信息,降低自定义 Exception 手动输入错误代码产生错误类型与 HttpStatus 不一致或不配问
- [重构] 重构后端 Spring Authorization Server 核心数据实体,补充新版本缺失参数及字段
- [重构] 抽取 Spring Authorization Server 通用工具代码,以支持更多认证模式。
- [重构] 使用 Thymeleaf 模版统一内置页面布局,统一设备认证页面,提升页面代码易维护性。
- [重构] 重新配置并统一 maven repositories 和 pluginRepositories。以 dante-engine dependencies 为核心,删除其它工程中,重复和冲突的配置。
- [重构] 重构自定义实体转换 RegisteredClient 代码,抽取公共转换适配器,减少重复代码方便后续 SAS 属性变更统一修改。
- [重构] 重构 OAuth2 Authentication 模块,缩减包名,明晰定位。
- [重构] 重构 Spring Authorization Server 相关自定义配置类,根据相关模块职责与定位,重新梳理所有配置参数,并整合已有配置类,调整和精简配置参数,减少配置在各模块间交叉引用,提升和增强模块内聚性。
- [重构] 合并 oauth2-sdk-compliance 模块至 oauth2-sdk-management
- [重构] Apache HttpClient 4 相关组件全部修改为使用 Apache HttpClient 5。调整相关依赖包以及代码中引入包
- [重构] 大幅优化客户端自动注册功能逻辑,重构相关代码。
- [重构] 采用 Spring Converter 接口方式,重构 Spring Authorization Server 数据操作层实体转换代码
- [重构] 抽取 Sentinel Gateway 相关代码合并为基础设施 starter。方便 Alibaba 基础设施与其他基础设施环境的切换。
- [重构] 将所有业务类型Service中,用于标记代码执行的,debug级别日志删除。仅保部分需要展现关键信息的、方便查看和定位问题的日志输出
- [重构] 采用自定义 Jackson 反序列化器和序列化器方式,简化部分管理功能原有DTO请求参数转换实体的繁琐代码。
- [修复] 修复 Access Token Scope 设置不正确导致 OAuth2 Client 使用授权码模式登录出错问题。
- [修复] 修复组件模块编译错误
- [修复] 修复自定义社交登录模式中,微信小程序参数获取不到错误。
- [修复] 修复单体版 Swagger 参数层级配置错误,导致 SpringDoc Authorize 按钮不显示问题
- [修复] 修复前端代码与后端不匹配以及字段参数缺失问题
- [修复] 优化前端 OAuth2 应用管理功能,修复分页面内容显示错误问题。
- [修复] 修改 Spring Authorization Server 默认的 SessionRepository 配置。解决使用 Spring Session 配置 SessionRepository 导致设备认证流程错误问题
- [修复] 修复 UAA 在本地数据访问模式下,修改用户角色权限后,重新获取的用户权限不正确问题。fix: #I718BI (ISSUED by 晏刚)
- [修复] 修复 UAA 数据访问策略条件默认状态设置错误问题。
- [修复] 调整 rest 相关配置参数,解决原有 feign 开启 okhttp 支持后,openfeign 调用 无法找到服务,出现 UnknownHostException 错误问题。
- [修复] 修复 自定义 Login 页面不显示错误信息问题。
- [修复] 修复 OAuth2 部分错误信息,脱离系统统一错误处理体系,导致交互错误信息显示不准确问题。
- [优化] Security 相关代码适配 Spring Security 最新用法。
- [优化] 使用最新版 Bpmn-js、Diagram-js 内部 Typescript 定义替换自定义 Typescript 定义,并优化重构相关代码以适配最新定义
- [优化] 优化客户端动态自动注册相关功能代码及配置方式
- [优化] 优化数据库初始化脚本,增加 Spring Authorization Server 内置默认 Scope 数据及关联数据。
- [优化] 清理 rest-sdk-client 包中,自定义 okhttp 和 httpclient 配置代码,统一使用 openfeign 进行配置和管控。
- [优化] 升级部分 maven plugin 至最新版本,去除在 maven 3.9.2 下编译代码产生警告信息问题。
- [优化] 清理核心 dependencies pom,删除无用的或者与 spring-boot-dependencies 中配置重复的配置
【依赖更新】
- [升级] minio 版本升级至 8.5.3
- [升级] snakeyaml 版本升级至 2.0.
- [升级] redisson 版本升级至 3.21.3
- [升级] fastjson2 版本升级至 2.0.32
- [升级] wxjava 版本升级至 4.5.0
- [升级] tencentcloud-sdk-java-sms 版本升级至 3.1.760
- [升级] alipay-sdk-java 版本升级至 4.35.136.ALL
- [升级] mapstruct-processor 版本升级至 1.5.5.Final
- [升级] maven-gpg-plugin 版本升级至 3.1.0
- [升级] aliyun-sdk-oss 版本升级至 3.16.3
- [升级] maven-source-plugin 版本升级至 3.3.0
- [升级] git-commit-id-maven-plugin 版本升级至 6.0.0
- [升级] vue webjars 版本升级至 3.3.3
【临时变更】
- [变更] 临时将 Snakeyaml 版本恢复至 1.33,以保证 Spring Cloud Tencent 可以正常运行,待其兼容 Snakeyaml 2.0 版本发布后再行恢复
[三] 小结
作者本人过往工作,主要专注企业信息化项目建设,经手过大大小小、各式各样、规模各异的项目粗略估算也有 180+。这些项目经历,足以让我体会IT行业的千滋百味。回顾过往,发现其中很多工作,特别是很多会占用技术人员大量时间和精力的工作,大多数情况下并不是像技术攻关、新技术研究、业务架构设计、并发性能调优等有挑战性的工作,而往往都是因细节考虑欠缺、代码质量不高、在用技术老旧、欠缺优化迭代、系统难于维护、项目管理不善等问题产生的需要长期投入的、低效、低意义工作。
这也是为什么做 Dante Cloud 的初衷:一方面是以 Dante Cloud 为载体,潜移默化地将过往项目建设的经验教训融入其中,尽可能地帮助使用者规避或者减少无效工作,提升工作效率和质量,有跟多的时间做更有意义的事情;另一方面不断地融合和使用各类新兴技术,帮助使用者尽可能多的了解、学习和运用新技术,让技术不再成为禁锢变为进步和提升的基石。
这也是为什么 Dante Cloud 与其它项目不同:Dante Cloud 并不关注常规应用功能的堆叠与丰富化,因为作者认为纯开发工作仅占整个项目建设投入的 20%,减少开发投入、提升开发效率未必就能减少整个项目建设周期剩余80%工作投入。Dante Cloud 的远景目标是可以帮助使用者缩短整个项目的建设周期和减少无意义的工作投入,而不仅仅只是在开发效率方面的提升。
Dante Cloud 一直秉承“简洁、高效、包容、务实”的理念,不会采取任何额外的手段来获取更多的 Star,绝对真实就像其产品一样。如果你认可和喜欢 Dante Cloud,请不要吝啬你的赞美,项目右上角点颗小星星。