1🌈Danta Cloud介绍
Dante Cloud (但丁,原Eurynome Cloud) 是一款企业级微服务架构和服务能力开发平台。基于Spring Boot 2.7.5、Spring Cloud 2021.0.5、Spring Cloud Alibaba 2021.0.4.0、Spring Authorization Server 0.3.1、Nacos 2.1.2等最新版本开发,遵循SpringBoot编程思想,高度模块化和可配置化。具备服务发现、配置、熔断、限流、降级、监控、多级缓存、分布式事务、工作流、多租户等功能,代码简洁,架构清晰,非常适合学习和企业作为基础框架使用。
🌊一句话介绍: Danta Cloud是基于Spring Authorization Server全新适配OAth2.1协议的企业级微服务架构企业级技术中台微服务架构与服务能力开发平台。
2Dante Cloud平台定位🔥
- 构建成熟的、完善的、全面的,基于OAuth2的、前后端分离的微服务架构解决方案。
- 面向企业级应用和互联网应用设计开发,既兼顾传统项目的微服务化,又满足互联网应用开发建设、快速迭代的使用需求。
- 平台架构使用微服务领域及周边相关的各类新兴技术或主流技术进行建设,是帮助快速跨越架构技术选型、研究探索阶段的利器。
- 代码简洁规范、结构合理清晰,是新技术开发应用的典型的、综合性案例,助力开发人员对新兴技术的学习和掌握。
3🎉主要特性
- 面向互联网和企业级应用开发,支持手机验证码,小程序,第三方应用登录,企业人事管理等诸多功能。
- Maven多模块依赖,高度模块化和可配置化,方便模块升级,增减模块。
- 适配多种数据库类型,同时支持 Spring Data JPA 和 Mybatis Plus。
- 支持动态方法级权限,无须配置 @PreAuthorize 注解,使用 antMatchers 方法控制权限。
- 完善的XSS防范及脚本过滤和SQL注入防控机制,便捷的,灵活的防刷机制,杜绝外部恶意攻击。
- 可配置化的、基于自定义Session的前后端数据加密传输。
- 基于Spring Authorization Server的企业应用安全合规性管理功能设计和实现。
- 多种消息队列支持,基于消息总线适配 RabbitMQ 和 Kafka。
- 自动化权限数据收集,数据表结构默认数据自动初始化,Nacos 配置自动导入。
- 自研多级数据缓存,完美融合 Spring Data JPA & Hibernate & Mybatis Plus 二级查询缓存。
- 共享式,统一性多环境配置,统一化配置设定,简化配置参数修改数量,降低修改配置出错率,提升平台维护便捷性。
4新版前端特点:
- 未使用任何流行开源模版,使用全新技术栈,完全纯"手写"全新前端工程。
- 借鉴参考流行开源版本的使用和设计,新版前端界面风格和操作习惯尽量与当前流行方式统一。
- 充分使用Typescript语言特性,解决大量类型校验问题,尽可能规避any式的Typescript编程语言使用方式。
- 充分使用Composition Api和Hooks等Vue3框架新版特性进行代码编写。
- 充分利用Component、Hooks以及Typescript面向对象等特性,抽取通用组件和代码,尽可能降低工程重复代码。
- 对较多Quasar基础组件和应用功能组件进行封装,以方便代码的统一修改维护和开发使用。
- 对生产模式下,对基于Vite3的工程打包进行深度性能优化。
- 提供以docker-compose方式,对工程生产代码进行容器化打包和部署。
5新版后端特点
基于 Spring Authorization Server 深度定制:
- 基于 Spring Data JPA,重新构建 Spring Authorization Server 基础数据存储代码,替代原有 JDBC 数据访问方式,破除 Spring Authorization Server 原有数据存储局限,扩展为更符合实际应用的方式和设计。
- 基于 Spring Authorization Server,在 OAuth 2.1 规范基础之上,增加自定义“密码”认证模式,以兼容现有基于 OAuth 2 规范的、前后端分离的应用。
- 基于 Spring Authorization Server,在 OAuth 2.1 规范基础之上,增加自定义 Social Credentials 认证模式,支持手机短信验证码、微信小程序、第三方应用登录。
- 遵照 Spring Security 5 以及 Spring Authorization Server 的代码规范,进行 OAuth2 认证服务器核心代码的开发,遵照其使用 Jackson 反序列化的方式, 增加大量自定义 Jackson Module。
- 支持 Spring Authorization Server 的标准的 Token 加密校验方式外,还了增加支持自定义证书的 Token 加密方式,可通过配置动态修改
- 支持 OAuth2 OIDC 认证模式,补充前端 OIDC 认证相关配置操作,以及对应的 /userinfo 接口调用支持 和 客户端注册支持
- 支持 OAuth2 Authorization Code PKCE 认证模式
- 扩展 Spring Authorization Server 默认的 Client Credentials 模式,实现 Refresh Token 的创建。
- 扩展 Spring Authorization Server 默认的 Client Credentials 模式,实现真正的使用 Scope 权限对接口进行验证。增加客户端 Scope 的权限配置功能,并与已有的用户权限体系解耦
- 自定义 Spring Authorization Server 授权码模式登录认证页面和授权确认页面,授权码模式登录采用数据加密传输。支持多种验证码类型,暂不支持行为验证码。
代码结构的大规模调整和优化:
- 对原有代码进行了深度的“庖丁解牛”,严格遵照“单一职责”原则,根据各个组件的职责以及用途,将整个工程拆解细化为多个各自独立组件模块,在最大程度上降低代码间的耦合,也更容易聚焦和定位问题。
- 将通用化组件提取为独立工程,独立编译、按需选用,极大的降低系统主工程代码量。相关组件也已上传至 Maven 中央仓库,降低系统主工程工程代码编译耗时,改进和提升 CICD 效率,
- 原有主工程代码结构也进行了深化调整,代码分包更加合理,代码逻辑也更加清晰。
6额外说明
- 本项目以后将主要维护Spring Authorization Server版本,原有基于Spring Security OAuth2的版本已经移至spring-security-oauth2分支,可以从该分支或发行版页面获取历史版本继续使用。后期会根据 ISSUE 以及使用用户反馈情况,再行决定是否继续维护Spring Security OAuth2版本。
- 基于Vue3、Vite3、Vuetify3、Pinia等新版前端已发布,原有基于Vue2、Vuetify2、Typescript开发的前端代码已移至vue2+vuetify2+typescript分支
- 自2.7.2.3版本起,Dante Cloud所有核心代码全部开源。
新开放内容包括:
- 接口权限鉴权:全面整合@PreAuthorize注解权限与URL权限,通过后端动态配置,无须在代码中配置Spring Security权限注解以及权限方法,即可实现接口鉴权以及权限的动态修改。采用分布式鉴权方案,规避 Gateway统一鉴权的压力以及重复鉴权问题
- 动态权限数据分发:采用分布式服务独立鉴权方案,Spring Security @PreAuthorize的权限注解、权限方法以及URL权限,通过后端动态配置后,实时动态分发至对应服务。
- User数据策略访问:OAuth2 UserDetails核心数据支持直连数据库获取和Feign远程调用两种模式。OAuth2直连数据库模式性能更优,Feign访问远程调用可扩展性更强。可通过配置动态修改采用策略方式。
- 手机短信验证码注册认证:采用自定义OAuth2授权模式,使用统一Token接口,实现手机验证码登录认证,与平台为统一体系,统一返回OAuth2 Token,支持服务接口鉴权
- 第三方系统社交注册认证:集成JustAuth,采用自定义OAuth2授权模式,使用统一Token接口,实现基于JustAuth实现第三方系统社交登录认证,与平台为统一体系,统一返回OAuth2 Token,支持服务接口鉴权。所有JustAuth支持的第三方系统均支持。
- 微信小程序注册认证:采用自定义OAuth2授权模式,使用统一Token接口,实现支持微信小程序登录认证,与平台为统一体系,统一返回OAuth2 Token,支持服务接口鉴权。
- 其它方式注册认证:采用策略模式对外部系登录认证和用户注册进行接入支持,采用OAuth2默认认证接口。目前未集成的外部系统,可参考标准,适当增减参数,即可支持接入。
- 多通道SMS集成:集成阿里,百度,中国移动,华为,京东,极光,网易,七牛,腾讯,又拍,云片等平台短信发送通道。可通过配置动态选择具体使用通道。支持多模版定义以及模版参数顺序控制
- 微信小程序订阅消息:支持微信小程序订阅消息发送。提供订阅消息模版工厂,可根据自身业务需求,编写少量代码既可以拓展支持新订阅消息模版。
7项目地址
- 后端主工程地址:gitee.com/dromara/dan…[1]
- 后端核心组件库地址:gitee.com/herodotus/d…[2]
- 后端单体版示例工程地址:gitee.com/herodotus/d…[3]
- 前端工程地址:gitee.com/herodotus/d…[4]
8技术架构
9后端技术栈
- 持久层框架:Spring Data Jpa & Mybatis Plus
- API 网关:Spring Cloud Gateway
- 服务注册&发现和配置中心: Alibaba Nacos
- 服务消费:Spring Cloud OpenFeign & RestTemplate & OkHttps
- 负载均衡:Spring Cloud Loadbalancer
- 服务熔断&降级&限流:Alibaba Sentinel
- 服务监控:Spring Boot Admin
- 消息队列:使用 Spring Cloud 消息总线 Spring Cloud Bus 默认 Kafka 适配 RabbitMQ
- 链路跟踪:Skywalking
- 分布式事务:Seata
- 数据缓存:JetCache + Redis + Caffeine, 自定义多级缓存
- 数据库:Postgresql,MySQL,Oracle ...
- JSON 序列化:Jackson & FastJson
- 文件服务:阿里云 OSS/Minio
- 数据调试:p6spy
- 日志中心:ELK
- 日志收集:Logstash Logback Encoder
10核心技术选型
1️⃣系统环境
- JAVA8/11/17
- Apache Maven
2️⃣主框架
- Spring Boot 2.7.5
- Spring Cloud 2021.0.5
- Spring Cloud Alibaba 2021.0.4.0
- Spring Authorization Server & OAuth 2.1
- Spring Boot Admin
3️⃣持久层
- Apache Mybatis & Mybatis Plus
- Spring Boot Data JPA
- Spring Boot Validation
- Jetcache,Caffeine,Redis lettuce,Redisson
4️⃣中间件
- Nacos
- Sentinel
- Seata
- Redis
- Kafka & RabbitMq
- Feign & RestTemplate & OkHttps
- Skywalking
- Spring Cloud Gateway ...
11项目工程结构说明
后端工程结构
dante-cloud
├── configurations -- 配置文件脚本和统一Docker build上下文目录
├── dependencies -- 工程Maven顶级依赖,统一控制版本和依赖
├── module -- 依赖组件半成品拼装工程
├ ├── dante-module-common -- Module 相关模块公共辅助代码组件
├ ├── dante-module-security -- Security 相关配置代码模块组件
├ ├── dante-module-upms-logic -- UPMS 基础管理及共享代码模块组件
├ └── dante-module-upms-rest -- UPMS 基础管理接口模块组件
├── packages -- 基础核心Starter
├ ├── authorization-spring-boot-starter -- OAuth2 认证基础Starter,主要用于 UAA 认证服务器以及单体版 Dante Cloud
├ └── service-spring-boot-starter -- 平台接入应用服务通用 Starter
├── platform -- 平台核心服务
├ ├── dante-cloud-gateway -- 服务网关
├ ├── dante-cloud-monitor -- Spring Boot Admin 监控服务
├ ├── dante-cloud-upms -- 统一权限管理系统服务
├ └── dante-cloud-uaa -- 账户管理和统一认证模块
├── services -- 平台业务服务
├ ├── dante-cloud-bpmn-ability -- 工作流服务
└── └── dante-cloud-bpmn-logic -- 工作流基础代码包
组件工程结构
dante-engine
├── dependencies -- 工程Maven顶级依赖,统一控制版本和依赖
├── documents -- 需要放置的文档位置
├ └── readme -- README 相关素材放置目录
├── engine-access -- 外部登录接入模块
├ ├── access-core -- 外部登录通用代码组件
├ ├── access-sdk-all -- 外部登录集成组件
├ ├── access-sdk-justauth -- JustAuth登录组件
├ ├── access-sdk-wxapp -- 微信小程序登录组件
├ ├── access-sdk-wxmpp -- 微信公众号登录组件
├ └── access-spring-boot-starter -- 外部登录 模块统一 Starter
├── engine-assistant -- 核心通用代码包
├ ├── assistant-core -- 核心通用代码组件
├ └── assistant-spring-boot-starter -- Assistant 模块统一 Starter
├── engine-cache -- 缓存模块
├ ├── cache-core -- 缓存通用代码组件
├ ├── cache-sdk-caffeine -- Caffeine 缓存配置相关代码组件模块
├ ├── cache-sdk-jetcache -- JetCache 组件相关代码模块
├ ├── cache-sdk-redis -- Caffeine 缓存配置相关代码组件模块
├ ├── cache-sdk-redisson -- Redisson 组件相关代码模块
├ └── cache-spring-boot-starter -- Cache 模块统一 Starter
├── engine-captcha -- 验证码模块
├ ├── captcha-core -- 验证码共性通用代码
├ ├── captcha-sdk-behavior -- 行为验证码组件(包括拼图滑块、文字点选)
├ ├── captcha-sdk-graphic -- 传统图形验证码组件(包括算数类型、中文类型、字母类型、GIF类型)
├ ├── captcha-sdk-hutool -- Hutool验证码组件(包括圆圈干扰、扭曲干扰、线段干扰)
├ └── captcha-spring-boot-starter -- Captcha 模块统一 Starter
├── engine-data -- 数据访问模块
├ ├── data-core -- 数据访问共性通用代码
├ ├── data-sdk-jpa -- JPA 及Hibernate 组件相关代码模块
├ ├── data-sdk-mybatis-plus -- MybatisPlus 组件相关代码模块
├ ├── data-sdk-p6spy -- P6spy 组件相关代码模块
├ └── data-spring-boot-starter -- Data 模块统一 Starter
├── engine-event -- Spring 事件模块
├ ├── event-core -- 事件组件共性代码模块
├ ├── event-pay-spring-boot-starter -- 支付事件统一 Starter
├ └── event-security-spring-boot-starter --安全事件统一 Starter
├── engine-facility -- 微服务基础设施模块
├ ├── facility-core -- 基础设施共性通用代码
├ ├── facility-sdk-log -- 微服务日志中心组件模块
├ ├── facility-sdk-sentinel -- Sentinel 组件模块
├ └── facility-spring-boot-starter -- Facility 模块统一 Starter
├── engine-message -- 消息模块
├ ├── message-core -- 消息共性通用代码
├ └── message-spring-boot-starter -- Message 模块统一 Starter
├── engine-nosql -- Nosql 数据库接入管理模块
├ ├── nosql-core -- nosql基础共性通用代码
├ ├── nosql-sdk-couchdb -- Couchdb Nosql 数据库接入管理组件模块
├ └── nosql-sdk-influxdb -- Influxdb 时序数据库接入管理组件模块
├── engine-oauth2 -- OAuth2 认证模块
├ ├── oauth2-core -- OAuth2 共性通用代码
├ ├── oauth2-sdk-authorization -- Spring Authorization Server Granter 扩展组件模块
├ ├── oauth2-sdk-authorization-server -- Spring Authorization Server 管理代码模块
├ ├── oauth2-sdk-compliance -- Spring Authorization Server 应用安全合规支撑组件模块
├ ├── oauth2-sdk-data-jpa -- 基于 Spring Data JPA 封装的 Spring Authorization Server 数据访问代码模块
├ ├── oauth2-sdk-metadata -- 鉴权元数据处理代码模块
├ └── oauth2-sdk-resource-server -- OAuth2 资源服务器通用代码模块
├── engine-oss -- 对象存储模块
├ ├── oss-core -- 对象存储共性通用代码
├ ├── oss-sdk-minio -- Minio 组件模块
├ └── oss-spring-boot-starter -- Oss 模块统一 Starter
├── engine-pay -- 支付模块
├ ├── pay-core -- 支付共性通用代码
├ ├── pay-sdk-alipay -- 支付宝支付组件模块
├ ├── pay-sdk-all -- 支付方式整合组件模块
├ ├── pay-sdk-wxpay -- 微信支付组件模块
├ └── pay-spring-boot-starter -- Pay 模块统一 Starter
├── engine-protect -- Rest API 防护组件
├ ├── protect-core -- Rest API 防护共性代码模块组件
├ ├── protect-sdk-web -- 前后端数据加密、接口幂等、防刷、Xss和SQL注入防护组件模块
├ └── protect-sdk-spring-boot-starter -- Protect 模块统一 Starter
├── engine-rest -- 服务Rest接口模块
├ ├── rest-core -- 服务Rest接口共性通用代码
├ └── rest-spring-boot-starter -- Rest 模块统一 Starter(包括通用CRUD代码)
├── engine-sms -- 短信接入模块
├ ├── sms-core -- 短信共性通用代码模块
├ ├── sms-sdk-aliyun -- 阿里云短信发送组件模块
├ ├── sms-sdk-all -- 短信整合组件模块
├ ├── sms-sdk-chinamobile -- 移动短信发送组件模块
├ ├── sms-sdk-huawei -- 华为短信发送组件模块
├ ├── sms-sdk-jd -- 京东短信发送组件模块
├ ├── sms-sdk-netease -- 网易短信发送组件模块
├ ├── sms-sdk-qiniu -- 七牛短信发送组件模块
├ ├── sms-sdk-tencent -- 腾讯短信发送组件模块
├ ├── sms-sdk-upyun -- 又拍短信发送组件模块
├ ├── sms-sdk-yunpian -- 云片短信发送组件模块
├ └── sms-spring-boot-starter -- SMS 模块统一 Starter(包括通用CRUD代码)
├── engine-web -- Web处理模块
├ ├── web-core -- Web 应用共性通用代码模块组件
├ ├── web-sdk-rest -- Web 应用基础支撑模块组件
├ ├── web-sdk-scan -- 接口权限扫描组件模块
├ └── web-spring-boot-starter -- Web 模块统一 Starter
├── engine-websocket -- Websocket模块
├ ├── websocket-core -- Websocket模块共性通用代码
├ ├── websocket-sdk-accelerator -- Websocket基础逻辑组件模块
└── └── websocket-spring-boot-starter -- Websocket 模块统一 Starter
12内置功能
- 用户管理:用户是系统操作者,该功能主要完成系统用户配置。包含第三方登录用户信息的管理。
- 角色管理:创建用户角色,为角色权限分配,设置角色接口权限划分。
- 接口管理:对动态汇总的、各个服务的接口进行统一管理。
- 安全管理:动态设定接口表达式权限,替代在代码中使用 @PreAuthorize 注解,antMatchers 方法等传统权限控制手段。
- 默认角色:配置第三方社交登录自动注册登录所使用的角色
- 菜单管理:前端页面显示菜单及菜单角色管理,
- 终端管理:OAuth2 终端信息管理,设置终端认证类型,Token有效时间,权限范围等信息。
- 应用管理:结合 OAuth2 机制,创建应用信息,申请APP_KEY。
- 范围管理:创建终端权限范围,设置范围对应权限。
- 凭证管理:Spirng Authorization Server 分配的Token情况信息
- 操作日志:用户登录登出系统日志信息记录查看导出
- 机构管理:配置系统组织机构,支持树形结构展示。
- 部门管理:配置机构下属部门信息,支持树形机构展示。
- 人员管理:配置机构人员信息,为人员分配和创建用户信息。
- 归属管理:配置机构,部门和人员的归属关系,支持人员信息唯一,绑定标准机构,党团,工会等多种机构类型。避免针对不同机构类型为统一人员创建重复信息。此种结构设定,与Camunda工作流人员体系一一对应。
- 系统接口:根据业务代码自动生成相关的api接口文档。
- 服务监控:监视当前系统CPU,内存,磁盘,堆栈等相关信息。
- 工作流编辑器:基于BPMN 2.0标准的在线工作流模型编辑器,支持SVG,XML格式导入、导出、云端上传。
13方法级动态权限
14服务调用监控链
15总结
Dante Cloud 我个人觉得对于新手想深入了解Java以及微服务相关技术的可以去了解学习一下,非常优秀,在此推荐一下
参考资料
[1]
gitee.com/dromara/dan…: https://gitee.com/dromara/dante-cloud
[2]
gitee.com/herodotus/d…: https://gitee.com/herodotus/dante-engine
[3]
gitee.com/herodotus/d…: https://gitee.com/herodotus/dante-cloud-athena
[4]
gitee.com/herodotus/d…: https://gitee.com/herodotus/dante-cloud-ui
开源地址:
https://gitee.com/herodotus