项目介绍
[一]项目概览
Dante Cloud 是一款基于 Spring Boot
,Spring Cloud
,Spring Cloud Alibaba
,Spring Authorization Server
,Vue
,Vite
,Pinia
,Quasar
,Typescript
的前后端分离的多租户微服务架构和服务能力开发平台。同时还提供与微服务版本技术体系一致的单体版架构,无须搭建复杂的微服务基础设施,即可快速搭建基于 OAuth2.1
的,前后端分离的服务应用。
主要特性
- 面向互联网和企业级应用开发(支持手机验证码,小程序,第三方应用登录,企业人事管理等诸多功能)
- Maven 多模块依赖,高度模块化和可配置化,方便模块升级,增减模块。
- 适配多种数据库类型,同时支持
Spring Data JPA
和 Mybatis Plus
- 支持动态方法级权限,无须配置
@PreAuthorize
注解,使用 antMatchers
方法控制权限。 - 完善的 XSS 防范及脚本过滤和 SQL 注入防控机制,便捷的,灵活的防刷机制,杜绝外部恶意攻击。
- 可配置化的、基于自定义 Session 的前后端数据加密传输。
- 基于
Spring Authorization Server
的企业应用安全合规性管理功能设计和实现 - 多种消息队列支持,基于消息总线适配
RabbitMQ
和 Kafka
- 自动化权限数据收集,数据表结构默认数据自动初始化,
Nacos
配置自动导入。 - 自研多级数据缓存,完美融合
Spring Data JPA
& Hibernate
& Mybatis Plus
二级查询缓存。 - 共享式,统一性多环境配置,统一化配置设定,简化配置参数修改数量,降低修改配置出错率,提升平台维护便捷性。
3.0.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 可编译成独立的组件,单独以组件形式进行发布
- 代码以共享模块的方式进行单独维护开发,降低现有工程代码复杂度,便于后续功能的扩展和代码的复用。
[二]技术选型
后端核心技术栈
(1)Spring 相关核心技术及版本
组件 | 版本 |
---|
Spring Boot | 2.7.12 / 3.1.0 |
Spring Cloud | 2021.0.7 / 2022.0.3 |
Spring Cloud Alibaba | 2021.0.5.0 / 2022.0.0.0 |
Spring Cloud Tencent | 1.11.2-2022.0.1 |
Spring Authorization Server | 0.4.2 / 1.1.0 |
Spring Boot Admin | 2.7.10 / 3.0.3 |
Nacos | 2.2.3 |
Sentinel | 1.8.5 |
Seata | 1.5.2 |
(2)涉及的相关的技术
- 持久层框架:
Spring Data Jpa
& Mybatis Plus
- API 网关:
Spring Cloud Gateway
- 服务注册&发现和配置中心:
Alibaba Nacos
& Tencent PolarisMash
& Zookeeper
- 服务消费:
Spring Cloud OpenFeign
& RestTemplate
& OkHttps
- 负载均衡:
Spring Cloud Loadbalancer
- 服务熔断&降级&限流:
Alibaba Sentinel
& Tencent PolarisMash
- 服务监控:
Spring Boot Admin
- 消息队列:使用
Spring Cloud
消息总线 Spring Cloud Bus
默认 Kafka
适配RabbitMQ
- 链路跟踪:
Skywalking
- 分布式事务:
Seata
- 数据缓存:
JetCache
多级缓存 (Redis
+ Caffeine
) - 数据库:
Postgresql
,MySQL
,Oracle
... - JSON 序列化:
Jackson
& FastJson
- 文件服务:阿里云 OSS/
Minio
- 数据调试:
p6spy
- 在线文档:
Springdoc
+ Swagger 3
+ OpenAPI
- 日志中心:
ELK
- 日志收集:
Logstash Logback Encoder
- 数据同步:
Debezimu
- 外部集成:
JustAuth
, WxJava
,多种短信 API - 工作流引擎:
Camunda
前端核心技术栈
- Vue3
- Vite4
- Typescript5
- Pinia2
- Vue-router4
- Axios
- Quasar2
- Bpmn.js
- Typescript4
- PNPM
[三]工程结构
后端工程结构
dante-cloud
├── configurations -- 配置文件脚本和统一Docker build上下文目录
├── dependencies -- 工程Maven顶级依赖,统一控制版本和依赖
├── module -- 依赖组件半成品拼装工程
├ ├── dante-module-common -- Module 相关模块公共辅助代码模块
├ ├── dante-module-metadata -- 权限元数据同步模块
├ ├── dante-module-security -- Security 相关配置代码模块
├ ├── dante-module-social -- 社交登录模块
├ └── dante-module-strategy -- UAA 核心数据访问策略模块
├── packages -- 基础核心Starter
├ ├── authorization-spring-boot-starter -- OAuth2 认证基础Starter,主要用于 UAA 认证服务器以及单体版 Dante Cloud
├ ├── facility-spring-boot-starter -- 基础设施切换依赖starter
├ └── service-spring-boot-starter -- 平台接入应用服务通用 Starter
├── platform -- 平台核心服务
├ ├── dante-cloud-gateway -- 服务网关
├ ├── dante-cloud-message -- 消息服务
├ ├── dante-cloud-monitor -- Spring Boot Admin 监控服务
├ ├── dante-cloud-upms -- 统一权限管理系统服务
├ └── dante-cloud-uaa -- 账户管理和统一认证模块
├── services -- 平台业务服务
├ ├── dante-cloud-bpmn-ability -- 工作流服务
├ ├── dante-cloud-bpmn-logic -- 工作流基础代码包
└── └── dante-cloud-oss-ability -- 对象服务
组件工程结构
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 -- Redis 缓存配置相关代码模块
├ ├── 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-tenant -- 基于JPA的多租户核心代码模块
├ └── data-spring-boot-starter -- Data 模块统一 Starter
├── engine-facility -- 微服务基础设施模块
├ ├── facility-alibaba-spring-boot-starter -- 面向 Spring Cloud Alibaba 的微服务基础设施适配模块
├ ├── facility-core -- 基础设施共性通用代码
├ ├── facility-gateway-spring-boot-starter -- Alibaba Sentinel 在 Gateway 环境下基础设施适配模块
├ ├── facility-original-spring-boot-starter -- 面向 Spring Cloud 原生全家桶的微服务基础设施适配模块
├ └── facility-tencent-spring-boot-starter -- 面向 Spring Cloud Tencent 的微服务基础设施适配模块
├── engine-message -- 消息模块
├ ├── message-core -- 消息共性通用代码
├ ├── message-kafka-spring-boot-starter -- 基础 Kafka 配置 Starter
├ ├── message-rabbitmaq-spring-boot-starter -- 基础 RabbitMQ 配置 Starter
├ ├── message-sdk-websocket -- 基于 WebSocket 的消息代码模块
├ ├── message-security-spring-boot-starter -- 安全相关事件统一 Starter
├ └── message-spring-boot-starter -- Message 模块统一 Starter
├── engine-oauth2 -- OAuth2 认证模块
├ ├── oauth2-core -- OAuth2 共性通用代码模块
├ ├── oauth2-sdk-authentication -- Spring Authorization Server 认证逻辑处理模块
├ ├── oauth2-sdk-authorization -- Spring Authorization Server 授权逻辑处理模块
├ ├── oauth2-sdk-data-jpa -- 基于 Spring Data JPA 封装的 Spring Authorization Server 数据访问代码模块
├ └── oauth2-sdk-management -- Spring Authorization Server 应用管理模块
├── engine-rest -- 服务Rest接口模块
├ ├── rest-core -- 服务Rest接口共性通用代码
├ ├── rest-sdk-client -- 各类 HttpClient 及 OpenAPI 集成模块
├ ├── rest-sdk-protect -- 前后端数据加密、接口幂等、防刷、Xss和SQL注入Rest API 防护模块
├ ├── rest-sdk-scan -- 接口权限扫描模块
├ ├── rest-server-spring-boot-starter -- 基础 Web Server 配置模块
├ └── 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-spring-boot-starter -- SMS 模块统一 Starter
├── engine-supplier -- 应用支持模块
├ ├── supplier-sdk-message -- 消息功能支持模块
├ ├── supplier-sdk-tenant -- 多租户功能支持模块
├ ├── supplier-sdk-upms-logic -- UPMS 基础服务支持模块
└── └── supplier-sdk-upms-rest -- UPMS 基础服务 REST 模块
[四]功能介绍
[1]统一安全认证中心
功能 | 介绍 |
---|
OAuth2 安全认证 | 支持 OAuth2 授权码模式,密码模式,客户端模式,刷新令牌模式和社交登录模式,五种授权模式式 |
自定义 OAuth2 页面 | 自定义 Spring Authorization Server 授权码模式登录认证页面和授权确认页面,提升系统使用用户体验。可结合自身需求进行修改 |
授权码模式 + PKCE | 支持基于 Spring Authorization Server2 的 Authorization Code + PKCE 认证模式,无需提供 Client Secret 提升安全性 |
授权码模式登录验证码 | 对 OAuth2 授权码模式登录进行了扩展,增加验证码保护,支持 gif,中文,算数等类型,可通过配置进行修改以及是否显示验证码控制 |
授权码模式登录数据加密传输 | 基于 SM2、SM4 对 OAuth2 授权码模式登录数据进行动态加密传输,可通过配置对表单参数名进行修改配置 |
自定义密码模式登录 | 增加自定义 Resource Ownership Password (密码) 认证模式,以兼容现有基于 OAuth 2 规范的、前后端分离的应用。 |
自定义密码模式登录加密传输 | 混合 SM2(非对称) 和 SM4(对称加密) 算法,对OAuth2 密码模式登录数据进行动态加密传输 |
自定义第三方社交登录模式 | 采用自定义第三方社交登录授权模式,使用统一认证接口,实现统一的手机验证码、JustAuth 社会化、微信小成效等登录认证,与平台为统一体系,统一返回OAuth2 Token,支持服务接口鉴权 |
扩展客户端模式接口鉴权 | 扩展 Spring Authorization Server 客户端认证模式,在传统的只进行 Scope 校验的基础之上,支持在客户端模式对服务接口进行鉴权 |
扩展刷新令牌模式 | 扩展Spring Authorization Server 刷新令牌模式,除原有授权码模式以外,密码模式,社交登录模式均支持 刷新令牌模式 |
令牌校验证书策略化配置 | 除支持 Spring Authorization Server 的标准的 JWT Token 加密校验方式外,新增基于自定义证书的 JWT Token 加密校验方式,可通过配置动态修改。 |
两种类型令牌切换 | 支持 Opaque Token (不透明令牌) 格式及校验方式,将低 JWT Token 被捕获解析的风险。可通过修改配置参数,设置默认 Token 格式是采用 Opaque Token 格式还是 JWT Token 格式。 |
全面支持 OpenID Connect (OIDC) 协议 | 全面支持 OpenID Connect (OIDC) 协议, 系统使用时可根据使用需求,通过前端开关配置,快速切换 OIDC 模式和传统 OAuth2 模式 |
降低用户信息的频繁请求 | 深度扩展 Authorization Code、Resource Ownership Password、Social Credentials 几种模式,全面融合 IdToken、Opaque Token、JWT Token 与现有权限体系,同时提供 IdToken 和 自定义 Token 扩展两种无须二次请求的用户信息传递方式,减少用户信息的频繁请求。 |
接口权限管理 | 扩展 RBAC 模型,以角色和接口为核心,实现接口使用的安全性管理。支持网关与服务多级接口白名单配置 |
接口权限鉴权 | 全面整合 @PreAuthorize 注解权限与 URL 权限,通过后端动态配置,无须在代码中配置 Spring Security 权限注解以及权限方法,即可实现接口鉴权以及权限的动态修改。采用分布式鉴权方案,规避 Gateway 统一鉴权的压力以及重复鉴权问题 |
User,Client 数据策略访问 | OAuth2 UserDetails 、ClientDetails 核心数据支持直连数据库获取和 Feign 远程调用两种模式。OAuth2 直连数据库模式性能更优,Feign 访问远程调用可扩展性更强。可通过配置动态修改采用策略方式。 |
手机短信验证码注册认证 | 采用自定义社交授权模式,使用统一 Token 接口,实现手机验证码登录认证。提供短信登录“沙盒”模式,在短信通道未开通时也可以验证手机登录流程 |
第三方系统社交注册认证 | 集成 JustAuth ,采用自定义 OAuth2 授权模式,使用统一 Token 接口,实现基于 JustAuth 实现第三方系统社交登录认证,与平台为统一体系,统一返回 OAuth2 Token,支持服务接口鉴权。所有 JustAuth 支持的第三方系统均支持。 |
微信小程序注册认证 | 采用自定义 OAuth2 授权模式,使用统一 Token 接口,实现支持微信小程序登录认证,与平台为统一体系,统一返回 OAuth2 Token,支持服务接口鉴权。 |
其它方式注册认证 | 采用策略模式对外部系统登录认证和用户注册进行接入支持,采用 OAuth2 默认认证接口。目前未集成的外部系统,可参考标准,适当增减参数,即可支持接入。 |
多模式多租户架构 | 基于 Spring Authorization Server 和 JPA 的多租户架构,支持独立数据库(Database)、共享数据库(Schema)、共享数据表(Discriminator) 三种模式 |
[2]统一服务访问网关
功能 | 介绍 |
---|
网关动态路由 | 基于 Gateway 和 Nacos 实现服务网关动态路由,无须增加任何配置,即可支持服务的发现与路由。 |
网关服务鉴权 | 采用各服务分布式鉴权,服务网关仅集成部分鉴权功能,增加了权限验证层次,规避无效的重复验证。提升系统安全性和访问有效性,降低接口访问压力。 |
网关服务限流 | 基于 Sentinel 实现服务的限流,支持基于 Gateway Filter 的自定义限流。 |
动态文档聚合 | 基于 SpringDoc 实现网关动态Swagger 文档聚合,全面使用Open API 3.0 ,支持Knife4j 增强和不同环境访问控制。 |
统一跨域处理 | 基于 Gateway 实现统一跨域处理 。 |
统一错误处理 | 平台统一错误处理,支持自定义错误码体系,有效集成 OAuth2 、Spring Validation 等多方错误体系并有机整合 HTTP 状态码,响应结果更加多样灵活,反馈结果也更加人性化,便于理解和定位问题。 |
自定义动态路由 | 除原有 Gateway 配置方式,支持基于数据库和 Redis 联动的的动态路由管理与路由规则配置,简单实现接口即可实现自定义配置管理。 |
网关大响应体数据分段传输 | 扩展 Spring Cloud Gateway 代码,实现大响应体请求数据分段传输,解决 Spring Cloud Gateway 大响应体数据丢失问题 。 |
[3]微服务架构支撑
功能 | 介绍 |
---|
服务注册发现 | 基于 Nacos 实现服务的注册与发现。 |
服务负载均衡 | Spring Cloud Netflix 停止维护,使用 Spring Cloud Loadbalancer 全面替换 Ribbon 。支持 Spring Cloud Loadbalancer 请求缓存,提升访问有效性和运行稳定性。 |
服务熔断降级 | 整合 OpenFeign 和 Sentinel ,从熔断降级,系统负载保护,热点防护等多个维度来保障微服务的稳定。支持 Sentinel 上报 Metrics 数据持久化存储到 Influxdb 时序数据库中,以及反向将 Sentinel 流控配置信息以配置文件的形式持久化存储至 Nacos 中 |
统一配置中心 | 基于 Nacos 搭建的统一配置中心,支持配置文件自动导入和关键信息加密,可根据文件夹名称自动分组配置。 |
统一日志中心 | 采用 TCP 直连的方式采集和发送日志,集成 Skywalking TraceID 实现日志聚合及 ELK 日志分析。通过 @EnableXXX 注解开启或关闭日志采集功能,支持日志聚合分析。 |
分布式工作流 | 以 Camunda 引擎为基础定义分布式工作流引擎,提供自研人事信息管理以及人事管理体系与工作流用户体系的实时集成 |
分布对象存储 | 支持 Minio 分布式对象存储。同时,集成阿里云 OSS,可通过 @EnableXXX 注解开启或关闭功能。 |
[4]微服务运行监控
功能 | 介绍 |
---|
服务调用链监控 | 集成 Skywalking 进行服务调用链的监控,调用链监控深度可延伸至Undertow ,数据库,Redis 。 |
应用吞吐量监控 | 集成 Skywalking 进行应用吞吐量监控。 |
熔断,降级监控 | 集成 Sentinel 进行服务的熔断,降级监控,支持 Sentinel 上报 Metrics 数据持久化存储到 Influxdb 时序数据库中,以及反向将 Sentinel 流控配置信息以配置文件的形式持久化存储至 Nacos 中。便于扩展更多的监控内容以及进行监控数据的分析。 |
微服务状态监控 | 集成 Spring Boot Admin 进行服务运行状态的监控,支持代码提交、代码编译、代码版本、提交人等诸多信息的监控。 |
运行环境状态监控 | 集成 TICK 监控方案实现对于服务器运行状态、服务运行状态等运行时状态监控以及告警,便于扩展更多的监控内容以及展现方式。 |
[5]数据自动化处理
功能 | 介绍 |
---|
数据模型初始化 | RBAC ,OAuth2 部分核心表,Camunda 数据表,在初始部署过程中为自动化创建。 |
核心应用数据初始化 | RBAC ,OAuth2 等核心数据,在初始部署过程中为自动化导入。 |
URL 权限数据动态汇总 | 自动扫描 URL 接口作为权限汇总存入系统,根据 URL 相关信息生成唯一 ID,多次导入数据不会重复。可通过配置动态开启或修改扫描内容。 |
动态权限数据分发 | 采用分布式服务独立鉴权方案,Spring Security @PreAuthorize 的权限注解、权限方法以及 URL 权限,通过后端动态配置后,实时动态分发至对应服务。支持多实例模式,多级缓存本地数据同步 |
Yml 配置自动导入 | 服务所需使用的配置文件,可自动根据文件夹进行分组并导入到 Nacos 中。 |
服务工程动态创建配置 | 支持使用 Maven Archetype 动态创建新服务代码工程,同步为新服务分配独立的 Client 校验信息,并创建对应的配置信息发布至 Nacos 中。 |
[6]服务开发支撑
功能 | 介绍 |
---|
通用 CRUD 封装 | 各种类型的代码生成器较多,结合实际应用使用效果来看,代码生成器在实际开发中使用频率低于理想预期。因此,没有考虑提供代码生成器,而是对常规的 CRUD 进行了多层次的封装,使定制化服务的开发更加便捷。 |
自研两级缓存封装 | 自研基于 JetCache 分布式两级缓存,完美支持 JPA Hibernate 二级缓存,完美支持各类查询数据缓存以及 JPA @ManyToMany , @ManyToOne 等关联查询。完美解决 Spring Cache 仅使用本地缓存、创建 Key 繁琐和分页数据无法更新的问题。支持多实例服务本地缓存和远程缓存数据通过,同时支持 Mybatis Plus 二级缓存 |
多类型数据库支持 | 默认采用 PostgreSQL 数据库,支持 MySQL ,Oracle ,H2 等多种关系型数据库,无须修改代码可动态切换。数据层同时支持 Spring Data Jpa 和 Mybatis Plus 。 |
多消息队列支持 | 消息总线(Spring Cloud Bus ), 适配 RabbitMQ 和 Kafka ,默认使用 Kafka 。 |
多种服务调用方式 | 默认采用 OpenFeign 进行服务间调用,支持 RestTemplate ,HttpClient 和 OkHttps 。 |
统一客户端配置 | 统一 OkHttp 、HttpClient 自定义配置,实现 OkHttp 、HttpClient 与 RestTemplate 、Openfeign 整合。统一使用 Feign 配置参数,对 OkHttp 、HttpClient 进行参数设定。可通过配置参数,策略化设置使用 OkHttp 还是 HttpClient 作为 RestTemplate 、Openfeign 的基础 HttpClient。 |
多种 Redis 客户端支持 | 系统底层使用 Spring Data Redis ,默认使 Lettuce 客户端。除 Spring Data Redis 已支持的客户端外,还集成了 Redission 客户端,可通过配置,动态开启或关闭 |
共享式多环境切换 | 共享式,统一化多环境配置模式,Xml,Yml,Docker 均采用此方式配置,避免类似的服务配置,Dockerfile 配置导出复制和修改的问题。 |
注解模型模块模式 | 除必要依赖逻辑以及强注入顺序要求的模块采用 Spring SPI (spring.factories)机制外,其它功能模块均采用 @EnableXXX 注解编程模型,可选择性进行控制是否开启对应模块,减少不必要的依赖注入和启动。 |
代码打包记录查询 | 对代码编译信息进行记录,可查询代码版本以及编译时间等相关信息,方便运维人员更好的掌握代码信息。 |
两种架构模式支撑 | 平台提供“分布式微服务”和“单体版”两种架构,核心代码共享,代码可以平滑迁移,适合不同应用使用需求。 |
多种数据审计支持 | 支持 createdBy、createdDate、modifiedBy 和 modifiedDate 等简单的审计形式,还支持实时数据审计、数据的变更记录、查看特定历史数据等数据审计功能 |
[7]系统安全增强
功能 | 介绍 |
---|
授权码模式安全强化 | 对 OAuth2 授权码模式登录进行了扩展,增加验证码保护,支持 gif,中文,算数等类型,基于 SM4 对 OAuth2 授权码模式登录数据进行动态加密传输,可通过配置对表单参数名以及是否显示验证码进行修改 |
密码模式安全强化 | 基于自定义 Session,混合国密 SM2(非对称) 和 SM4(对称加密) 算法,实现 AES 动态生成加密传输。利用“一人一码机制”,实现密码模式登录数据进行动态加密传输。配合 OAuth2 Client 验证,保护开放权限接口调用的合理性和安全性。 |
全面的 XSS 攻击和 SQL 注入防控: | 完善接口 XSS 脚本攻击过滤和 SQL 注入机制,同时支持请求参数和 JSON 请求体过滤。采用 Ebay XSS 过滤模型,进一步提升防控能力。 |
动态灵活的接口防刷机制 | 接口幂等和防刷机制,均支持全局配置控制,同时提供@Idempotent 和@AccessLimited 注解进行灵活的,个性化的配置。 接口幂等和防刷机制缓存标记采用分布式多级缓存进行存储,降低单一访问 Redis 带来的访问压力,同时支持多实例数据多级缓存本地数据同步。所涉及标记缓存时间配置全部统一支持 Duration 时间格式,简化配置参数,提升配置便捷度。 |
一人一钥的数据加密安全机制 | 混合 SM2(非对称) 和 SM4(对称加密) 算法,基于自定义注解,设计接口数据前后端加密传输机制。 设计自定义数据传输 Session,规避 Vue Session 变化问题。基于自定义 Session,实现 AES KEY 动态生成,加密传输,一人一钥的安全机制,提高系统安全性。全面支持使用 Spring @RequestParam 注解接口数据加解密。 |
多样统一的验证码 | 将行为验证码与图形验证码以及 Hutool 验证码整合并统一,目前支持滑块拼图、文字点选、算数类型、中文类型、字母类型、GIF 类型,以及 Hutool 圆圈干扰、扭曲干扰、线段干扰等多种类型验证码。使用统一接口,可以通过参数动态控制显示内容及形式。 |
敏感配置信息加密 | 集成 Jasypt ,对敏感配置进行,防止关键信息泄露。支持 Spring Boot 配置文件以及 Nacos 配置文件配置信息加密。 |
应用安全合规检查 | 基于 Spring Authrization Server 用户账号过期时间、用户密码过期、同一账号重复登录限制、登录错误次数限制,超过最大错误次数系统将自动锁定用户账号及自动解锁、登入、登出系统记录等丰富的企业应用安全合规检查支持功能 |
终端重复登录控制 | 针对不同类型的终端,支持终端可重复登录次数控制,可通过配置参数开启或关闭、修改次数限制 |
登录错误次数控制 | 用户登录系统错误次数限制,如错误次数超出规定则自动锁定账户。提供自动解锁和管理员解锁两种账户解锁方式 |
[8]应用支撑模块
功能 | 介绍 |
---|
WebSocket 模块 | 全面使用 STOMP 上层协议,支持 WebSocket 集群 Session 共享,信息广播及点对点发送,在线统计,可方便拓展断开重连,心跳机制。 |
Pay 模块 | 封装阿里支付、微信支付核心 API,支持普通商户及 ISV 模式,使用更加便捷。商户信息可配置,支持多商户管理。默认使用配置文件进行商户信息配置,支持使用关系型数据库进行商户信息存储,也可灵活自定义其它类型的存储媒介。采用事件机制实现支付异步通知以及异步回调处理,规避多次异步通知问题。最大程度上降低支付模块与实际业务的耦合性,便于开发更加独立的、更易扩展的订单、支付等微服务。 |
InfluxDB 模块 | InfluxDB 集成支撑模块,使用 InfluxDB 1.X 版本实现,支持配置化及动态开启关闭。 |
Minio 模块 | Minio 对象存储对象存储(OSS)模块,支持注解@EnableXXX 条件开启和关闭闭。 |
[9]信息发送集成
功能 | 介绍 |
---|
微信小程序订阅消息 | 支持微信小程序订阅消息发送。提供订阅消息模版工厂,可根据自身业务需求,编写少量代码既可以拓展支持新订阅消息模版。 |
多通道 SMS 集成 | 集成阿里,百度,中国移动,华为,京东,极光,网易,七牛,腾讯,又拍,云片等平台短信发送通道。可通过配置动态选择具体使用通道。支持多模版定义以及模版参数顺序控制 |
[10]后台管理功能
功能 | 介绍 |
---|
用户管理 | 用户是系统操作者,该功能主要完成系统用户配置。包含第三方登录用户信息的管理。 |
角色管理 | 创建用户角色,为角色权限分配,设置角色接口权限划分。 |
权限管理 | 用户权限 和 OAuth2 Scope 权限管理,支持同一权限配置多个接口。 |
接口管理 | 对动态汇总的、各个服务的接口进行统一管理。 |
默认角色 | 配置第三方社交登录自动注册登录所使用的角色 |
菜单管理 | 前端页面显示菜单及菜单角色管理 |
元数据管理 | 动态设定接口表达式权限,替代在代码中使用 @PreAuthorize 注解,antMatchers 方法等传统权限控制手段。 |
多租户数据源 | 多租户数据源管理功能,多租户数据源从配置文件配置方式变更为通过数据表进行管理 |
应用管理 | 结合 OAuth2 机制,创建应用信息,申请 APP_KEY。 |
终端管理 | OAuth2 终端信息管理,设置终端认证类型,Token 有效时间,权限范围等信息。 |
范围管理 | 创建终端权限范围,设置范围对应权限。 |
范围管理 | 创建终端权限范围,设置范围对应权限。 |
凭证管理 | Spirng Authorization Server 分配的 Token 情况信息示。 |
操作日志 | 用户登录登出系统日志信息记录查看导出示。 |
机构管理 | 配置系统组织机构,支持树形结构展示。 |
部门管理 | 配置机构下属部门信息,支持树形机构展示。 |
人员管理 | 配置机构人员信息,为人员分配和创建用户信息。 |
归属管理 | 配置机构,部门和人员的归属关系,支持人员信息唯一,绑定标准机构,党团,工会等多种机构类型。避免针对不同机构类型为统一人员创建重复信息。此种结构设定,与Camunda 工作流人员体系一一对应。 |
用户统计 | 实时在线用户统计及同步实时刷新功能 |
站内消息 | 系统公告、私信对话浏览信息功能 |
信息提醒 | 私信、公告信息消息提醒 |
系统接口 | 根据业务代码自动生成相关的 api 接口文档。 |
服务监控 | 监视当前系统 CPU,内存,磁盘,堆栈等相关信息。 |
工作流编辑器 | 基于BPMN 2.0 标准的在线工作流模型编辑器,支持SVG ,XML 格式导入、导出、云端上传。 |