跳至主要內容

项目介绍

码匠君SASSpring Authorization ServerDante Cloud微服务领域驱动DDDSpring BootSpring CloudSpring SecuritySpring Cloud AlibabaSpring Cloud TencentOAuth2.1NacosSkywalkingSentinelSeata大约 35 分钟

项目介绍

[一]项目概览

Dante Cloud 是一款基于 Spring BootSpring CloudSpring Cloud AlibabaSpring Authorization ServerVueVitePiniaQuasarTypescript 的前后端分离的多租户微服务架构和服务能力开发平台。同时还提供与微服务版本技术体系一致的单体版架构,无须搭建复杂的微服务基础设施,即可快速搭建基于 OAuth2.1 的,前后端分离的服务应用。

主要特性

  • 面向互联网和企业级应用开发(支持手机验证码,小程序,第三方应用登录,企业人事管理等诸多功能)
  • Maven 多模块依赖,高度模块化和可配置化,方便模块升级,增减模块。
  • 适配多种数据库类型,同时支持 Spring Data JPAMybatis Plus
  • 支持动态方法级权限,无须配置 @PreAuthorize 注解,使用 antMatchers 方法控制权限。
  • 完善的 XSS 防范及脚本过滤和 SQL 注入防控机制,便捷的,灵活的防刷机制,杜绝外部恶意攻击。
  • 可配置化的、基于自定义 Session 的前后端数据加密传输。
  • 基于Spring Authorization Server的企业应用安全合规性管理功能设计和实现
  • 多种消息队列支持,基于消息总线适配 RabbitMQKafka
  • 自动化权限数据收集,数据表结构默认数据自动初始化,Nacos 配置自动导入。
  • 自研多级数据缓存,完美融合 Spring Data JPA & Hibernate & Mybatis Plus 二级查询缓存。
  • 共享式,统一性多环境配置,统一化配置设定,简化配置参数修改数量,降低修改配置出错率,提升平台维护便捷性。

Dante Cloud 特性

核心基础依赖便捷切换

  • 新增 Spring Cloud TencentSpring Cloud 原生微服务全家桶等两种基础设施支持。
  • 新增 Spring Cloud AlibabaSpring Cloud TencentSpring Cloud 原生微服务全家桶三种基础设值切换能力,可以以相对便捷的方式切换使用 Alibaba、Tencent、Spring 等基础设施环境。可根据自身实际需求选择,不再局限于只能在某一种基础设施环境中运行。

Spring Authorization Server 全特性支持及扩展

  • 基于 Spring Authorization ServerSpring 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 CodeResource Ownership PasswordSocial Credentials 几种模式,全面融合 IdTokenOpaque TokenJWT Token 与现有权限体系,同时提供 IdToken 和 自定义 Token 扩展两种无须二次请求的用户信息传递方式,减少用户信息的频繁请求。
  • 自定义 Spring Authorization Server 授权码模式登录认证页面和授权确认页面,授权码模式登录采用数据加密传输。支持多种验证码类型,暂不支持行为验证码。
  • 新增基于 Spring Authorization Server 的、支持智能电视、IoT 等物联网设备认证模式
  • 无须在代码中配置 Spring Security 权限注解以及权限方法,即可实现接口鉴权以及权限的动态修改。采用分布式鉴权方案,规避 Gateway 统一鉴权的压力以及重复鉴权问题
  • OAuth2 UserDetails 核心数据支持直连数据库获取和 Feign 远程调用两种模式。OAuth2 直连数据库模式性能更优,Feign 访问远程调用可扩展性更强。可通过配置动态修改采用策略方式。

全体系化应用和开发特性集成

  • 微服务架构全体系 Session 共享,实现 Spring Authorization Server、多实例服务、WebSocket、自定义 Session 以及大前端 Session 的统一。微服务架构下的 Session 可以选择不用,但是不能没有
  • 混合国密 SM2 (非对称) 和 SM4 (对称加密) 算法,实现基于数字信封技术的秘钥动态生成加密传输。利用“一人一码机制”,实现前后端数据进行动态加密传输与。Spring Authorization Server OAuth 2.1 授权模式深度融合,构建统一体系的数据传输加密。
  • 全面整合 @PreAuthorize 注解权限与 URL 权限,通过后端动态配置,无须在代码中配置 Spring Security 权限注解以及权限方法,可实现接口鉴权以及权限的统一管理和动态修改
  • 融合 Spring Cloud Stream 和 WebSocket,以优雅的方式实现 WebSocket 服务多实例环境下,点对点、广播消息跨实例推送,在线用户实时统计,完美支持 WebSocket 集群化应用。
  • 借鉴 JPA 标准化设计思想,提取和抽象 OSS 标准化操作,形成统一的 Java OSS API 规范。封装可操作任意厂商的、统一的 REST API,构建定义统一、动态实现的应用模式(类似于 Hibernate 是 JPA 的一种实现,Hibernate 以 Dialect 方式支持不同的数据库一样),在不修改代码的情况下通过修改配置实现 OSS 的无缝切换和迁移
  • 自研基于 JetCache 分布式两级缓存,完美实现 JPA Hibernate 二级缓存,支持各类查询数据缓存以及 JPA @ManyToMany@ManyToOne等关联查询。完美解决 Spring Cache 仅使用本地缓存、创建 Key 繁琐和分页数据无法更新的问题。支持多实例服务本地缓存和远程缓存数据同步,同时支持 Mybatis Plus 二级缓存
  • 平台统一错误处理,支持自定义错误码体系,有效集成 OAuth2Spring Validation 等多方错误体系并有机整合 HTTP 状态码。采用 Customizer 模式,采用错误码自动计算和创建模式,支持代码模块级错误码灵活定义扩展。响应结果更加多样灵活,反馈结果也更加人性化,便于理解和定位问题。
  • 全体系 OkHttp 、HttpClient 统一化集成,实现 OkHttp 、HttpClient 与 RestTemplate 、Openfeign 一体化融合。统一使用 Feign 配置参数,对 OkHttp 、HttpClient 进行参数设定,可策略化选择设置使用 OkHttp 或 HttpClient 作为 RestTemplate 、Openfeign 统一的基础 HttpClient

采用 pnpm monorepo 重构前端

  • 未使用任何流行开源模版,使用全新技术栈,完全纯"手写"全新前端工程。
  • 借鉴参考流行开源版本的使用和设计,新版前端界面风格和操作习惯尽量与当前流行方式统一。
  • 充份使用 Typescript 语言特性,解决大量类型校验问题,尽可能规避 "any" 式的 Typescript 编程语言使用方式。
  • 充份使用 Composition Api 和 Hooks 等 Vue3 框架新版特性进行代码编写。
  • 充份利用 Component、Hooks 以及 Typescript 面向对象等特性,抽取通用组件和代码,尽可能降低工程重复代码。
  • 对较多 Quasar 基础组件和应用功能组件进行封装,以方便代码的统一修改维护和开发使用。
  • 对生产模式下,对基于 Vite 5 的工程打包进行深度性能优化。
  • 提供以 docker-compose 方式,对工程生产代码进行容器化打包和部署。
  • 该版本基于 pnpm,采用 monorepo 模式对前端工程进行重构。构建 monorepo 版本前端,是为扩展更多功能、增加应用级功能做铺垫
  • 抽取 utils、components、apis、bpmn-designer 等相关代码,形成共享模块。
  • 共享模块已进行优化配置,可编译成独立的组件,单独以组件形式进行发布。
  • 代码以共享模块的方式进行单独维护开发,降低现有工程代码复杂度,便于后续功能的扩展和代码的复用。

[二]技术选型

后端核心技术栈

(1)Spring 相关核心技术及版本

组件版本
Spring Boot3.2.4
Spring Cloud2023.0.1
Spring Cloud Alibaba2023.0.0.0
Spring Cloud Tencent1.13.1-2023.0.0
Spring Authorization Server1.2.3
Spring Boot Admin3.2.3
Nacos2.3.2
Sentinel1.8.7
Seata1.7.0

(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)
  • 数据库: PostgresqlMySQLOracle ...
  • JSON 序列化:Jackson & FastJson
  • 文件服务:阿里云 OSS/Minio
  • 数据调试:p6spy
  • 在线文档:Springdoc + Swagger 3 + OpenAPI
  • 日志中心:ELK
  • 日志收集:Logstash Logback Encoder
  • 数据同步:Debezimu
  • 外部集成:JustAuthWxJava,多种短信 API
  • 工作流引擎:Camunda

前端核心技术栈

  • Vue 3
  • Vite 4
  • Typescript 5
  • Pinia 2
  • Vue-router 4
  • Axios
  • Quasar 2
  • Bpmn.js
  • PNPM

[三]工程结构

后端工程结构

dante-cloud
├── configurations -- 配置文件脚本和统一Docker build上下文目录
├── dependencies -- 工程Maven顶级依赖,统一控制版本和依赖
├── module -- 依赖组件半成品拼装工程
├    ├── dante-module-common -- Module 相关模块公共辅助代码模块
├    ├── dante-module-metadata -- 权限元数据同步模块
├    ├── 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顶级依赖,统一控制版本和依赖
├── 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-definition -- 核心定义代码模块
├    ├── assistant-sdk-ip2region -- IP离线定位组件核心代码模块
├    └── assistant-autoconfigure -- 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-spring-boot-starter -- Message  模块统一 Starter
├── engine-oauth2 -- OAuth2 认证模块
├    ├── oauth2-authorization-server-autoconfigure -- OAuth2 授权服务器基础内容自动配置模块
├    ├── oauth2-core -- OAuth2 共性通用代码模块
├    ├── oauth2-resource-server-autoconfigure -- 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-condition -- 服务级 REST 相关自定义条件注解模块
├    ├── rest-sdk-protect -- 前后端数据加密、接口幂等、防刷、Xss 和 SQL 注入 Rest API 防护模块
├    ├── rest-sdk-service -- 基于 REST 的服务基础内容配置代码模块
├    ├── rest-spring-boot-starter -- Rest 模块统一 Starter(包括通用CRUD代码)
├    └── web-server-spring-boot-starter -- 基础 Web Server 配置模块
├── engine-sms -- 短信接入模块
├    ├── sms-core -- 短信共性通用代码模块
├    ├── sms-sdk-aliyun -- 阿里云短信发送模块
├    ├── sms-sdk-chinamobile -- 移动短信发送模块
├    ├── sms-sdk-huawei -- 华为短信发送模块
├    ├── 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-upms-logic -- UPMS 基础服务支持模块
├    └── supplier-sdk-upms-rest -- UPMS 基础服务 REST 模块
└──  readme -- README 相关素材放置目录

[四]功能介绍

[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 UserDetailsClientDetails 核心数据支持直连数据库获取和 Feign 远程调用两种模式。OAuth2 直连数据库模式性能更优,Feign 访问远程调用可扩展性更强。可通过配置动态修改采用策略方式。
手机短信验证码注册认证采用自定义社交授权模式,使用统一 Token 接口,实现手机验证码登录认证。提供短信登录“沙盒”模式,在短信通道未开通时也可以验证手机登录流程
第三方系统社交注册认证集成 JustAuth,采用自定义 OAuth2 授权模式,使用统一 Token 接口,实现基于 JustAuth 实现第三方系统社交登录认证,与平台为统一体系,统一返回 OAuth2 Token,支持服务接口鉴权。所有 JustAuth 支持的第三方系统均支持。
微信小程序注册认证采用自定义 OAuth2 授权模式,使用统一 Token 接口,实现支持微信小程序登录认证,与平台为统一体系,统一返回 OAuth2 Token,支持服务接口鉴权。
其它方式注册认证采用策略模式对外部系统登录认证和用户注册进行接入支持,采用 OAuth2 默认认证接口。目前未集成的外部系统,可参考标准,适当增减参数,即可支持接入。
多模式多租户架构基于 Spring Authorization Server 和 JPA 的多租户架构,支持独立数据库(Database)、共享数据库(Schema)、共享数据表(Discriminator) 三种模式

[2]统一服务访问网关

功能介绍
网关动态路由基于 GatewayNacos 实现服务网关动态路由,无须增加任何配置,即可支持服务的发现与路由。
网关服务鉴权采用各服务分布式鉴权,服务网关仅集成部分鉴权功能,增加了权限验证层次,规避无效的重复验证。提升系统安全性和访问有效性,降低接口访问压力。
网关服务限流基于 Sentinel 实现服务的限流,支持基于 Gateway Filter 的自定义限流。
动态文档聚合基于 SpringDoc 实现网关动态Swagger文档聚合,全面使用Open API 3.0,支持Knife4j增强和不同环境访问控制。
统一跨域处理基于 Gateway 实现统一跨域处理 。
统一错误处理平台统一错误处理,支持自定义错误码体系,有效集成 OAuth2Spring Validation 等多方错误体系并有机整合 HTTP 状态码,响应结果更加多样灵活,反馈结果也更加人性化,便于理解和定位问题。
自定义动态路由除原有 Gateway 配置方式,支持基于数据库和 Redis 联动的的动态路由管理与路由规则配置,简单实现接口即可实现自定义配置管理。
网关大响应体数据分段传输扩展 Spring Cloud Gateway 代码,实现大响应体请求数据分段传输,解决 Spring Cloud Gateway 大响应体数据丢失问题 。

[3]微服务架构支撑

功能介绍
服务注册发现基于 Nacos 实现服务的注册与发现。
服务负载均衡Spring Cloud Netflix 停止维护,使用 Spring Cloud Loadbalancer 全面替换 Ribbon。支持 Spring Cloud Loadbalancer 请求缓存,提升访问有效性和运行稳定性。
服务熔断降级整合 OpenFeignSentinel,从熔断降级,系统负载保护,热点防护等多个维度来保障微服务的稳定。支持 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]数据自动化处理

功能介绍
数据模型初始化RBACOAuth2 部分核心表,Camunda 数据表,在初始部署过程中为自动化创建。
核心应用数据初始化RBACOAuth2 等核心数据,在初始部署过程中为自动化导入。
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 数据库,支持 MySQLOracleH2等多种关系型数据库,无须修改代码可动态切换。数据层同时支持 Spring Data JpaMybatis Plus
多消息队列支持消息总线(Spring Cloud Bus), 适配 RabbitMQKafka,默认使用 Kafka
多种服务调用方式默认采用 OpenFeign 进行服务间调用,支持 RestTemplateHttpClientOkHttps
统一客户端配置统一 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 有效时间,权限范围等信息。
范围管理创建终端权限范围,设置范围对应权限。
范围管理创建终端权限范围,设置范围对应权限。
凭证管理Spring Authorization Server 分配的 Token 情况信息示。
操作日志用户登录登出系统日志信息记录查看导出示。
机构管理配置系统组织机构,支持树形结构展示。
部门管理配置机构下属部门信息,支持树形机构展示。
人员管理配置机构人员信息,为人员分配和创建用户信息。
归属管理配置机构,部门和人员的归属关系,支持人员信息唯一,绑定标准机构,党团,工会等多种机构类型。避免针对不同机构类型为统一人员创建重复信息。此种结构设定,与Camunda工作流人员体系一一对应。
用户统计实时在线用户统计及同步实时刷新功能
站内消息系统公告、私信对话浏览信息功能
信息提醒私信、公告信息消息提醒
系统接口根据业务代码自动生成相关的 api 接口文档。
服务监控监视当前系统 CPU,内存,磁盘,堆栈等相关信息。
工作流编辑器基于BPMN 2.0标准的在线工作流模型编辑器,支持SVGXML格式导入、导出、云端上传。

[五]安全测试

Dante Cloud 已通过由第三方公司进行的软件出厂安全测试。测试结果如下图所示:

说明

因涉及企业和项目信息,所以不便于再此展示具体测试报告。

安全测试整体结果
安全测试整体结果

Web 漏洞检测

采用相关扫描工具对应用系统进行漏洞扫描,根据漏洞扫描结果对存在的漏洞进行风险评估。初测共发现 2 个 Web 漏洞,其中高风险漏洞有 0 个,中风险漏洞有 1 个,低风险漏洞有 1 个。经过整改并复测后,高、中风险漏洞已整改完毕。

应用安全合规

针对等级保护三级系统的防护要求,对于应用安全涉及的“身份鉴别”、“访问控制”、“安全审计”、“剩余信息保护”、“通信完整性”、“通信保密性”以及“资源控制”等控制点进行

检查类别检查内容检查结果
身份鉴别应提供专用的登录控制模块对登录用户进行身份标识和鉴别符合
身份鉴别应对同一用户采用两种或两种以上组合的鉴别技术实现用户身份鉴别符合
身份鉴别应提供用户身份标识唯一和鉴别信息复杂度检查功能,保证应用系统中不存在重复用户身份标识,身份鉴别信息不易被冒用符合
身份鉴别应提供登录失败处理功能,可采取结束会话、限制非法登录次数和自动退出等措施符合
身份鉴别应启用身份鉴别、用户身份标识唯一性检查、用户身份鉴别信息复杂度检查以及登录失败处理功能,并根据安全策略配置相关参数符合
访问控制应提供访问控制功能,依据安全策略控制用户对文件、数据库表等客体的访问符合
访问控制访问控制的覆盖范围应包括与资源访问相关的主体、客体及它们之间的操作符合
访问控制应由授权主体配置访问控制策略,并严格限制默认帐户的访问权限符合
访问控制应授予不同帐户为完成各自承担任务所需的最小权限,并在它们之间形成相互制约的关系符合
安全审计应提供覆盖到每个用户的安全审计功能,对应用系统重要安全事件进行审计符合
安全审计应保证无法单独中断审计进程,无法删除、修改或覆盖审计记录符合
安全审计应提供对审计记录数据进行统计、查询、分析及生成审计报表的功能符合
剩余信息保护应保证用户鉴别信息所在的存储空间被释放或再分配给其他用户前得到完全清除,无论这些信息是存放在硬盘上还是在内存中符合
剩余信息保护应保证系统内的文件、目录和数据库记录等资源所在的存储空间被释放或重新分配给其他用户前得到完全清除符合
通信完整性应采用密码技术保证通信过程中数据的完整性符合
通信保密性在通信双方建立连接之前,应用系统应利用密码技术进行会话初始化验证符合
通信保密性应对通信过程中的整个报文或会话过程进行加密符合
资源控制当应用系统的通信双方中的一方在一段时间内未作任何响应,另一方应能够自动结束会话符合
资源控制应能够对系统的最大并发会话连接数进行限制符合
资源控制应能够对单个帐户的多重并发会话进行限制符合

渗透测试结果

检测漏洞类型检测结果
XSS 跨站符合
Sql 注入符合
用户名密码明文传输符合
伪造跨站请求符合
越权访问符合
上传漏洞符合
敏感信息泄露符合
目录遍历符合
存在测试页面符合
上传类型未验证符合
慢速 ddos 攻击符合
不安全的加密方法符合
Oracle 数据库版本漏洞符合
未设置 Httponly 标识符合
Secure cookie 机制符合
Struts 2 开发模式开启符合
Weblogic Server Side Request Forgery符合
CRLF 注入符合