指南
2024年12月31日大约 38 分钟SASSpring Authorization ServerDante Cloud微服务领域驱动DDDSpring BootSpring CloudSpring SecuritySpring Cloud AlibabaSpring Cloud TencentOAuth2.1NacosSkywalkingSentinelSeata
[一]项目概览
Dante Cloud 国内首个支持阻塞式和响应式服务并行的微服务平台。是采用领域驱动模型(DDD)设计思想,以「高质量代码、低安全漏洞」为核心,基于 Spring 生态全域开源技术,高度模块化和组件化设计,支持智能电视、IoT等物联网设备认证,满足国家三级等保要求,支持接口国密数字信封加解密等一系列安全体系的多租户微服务解决方案。独创的可以“一套代码实现微服务和单体两种架构灵活切换”的企业级应用系统。
- Dante Cloud 源码下载:https://gitee.com/dromara/dante-cloud
- Dante Cloud UI 源码下载:https://gitee.com/herodotus/dante-cloud-ui
- Dante Cloud 在线提问:https://gitee.com/dromara/dante-cloud/issues
Dante Cloud 响应式版本特性
Spring Boot
已升级至 3.3.0Spring Authorization Server
已升级至 1.3.0- 全面采用 Java 21,默认开启虚拟线程,以改善阻塞操作的处理降低系统资源的消耗
- 支持传统的
阻塞式
微服务与基于Reactor
和WebFlux
的响应式
微服务同时运行在一套系统之中 - 不强制使用
响应式
方式开发,可根据自身项目对资源吞吐量、资源消耗、特殊功能性能保障的需求,灵活的选择是采用响应式
还是阻塞式
来开发对应的服务。 - 在保持 Dante Cloud 原有
Spring Authorization Server
深度扩展的各种特性的前提下,实现响应式
服务的动态鉴权与现有体系的完全融合(无需在代码中使用@PreAuthorize
写死权限,全部通过后台动态管理) - 向“响应式编程”转变,基于
Reactor
重构大量核心代码,进一步提升本系统代码质量和运行效能 - 重新架构所有核心组件模块,进一步降低各模块的耦合性,减少第三方组件依赖深度,简化各模块使用的复杂度,使用更贴近 Spring Boot 生态官方写法,提升模块组件的可插拔性以及
响应式
和阻塞式
不同环境下自动配置的适配能力 - 实现
响应式
和阻塞式
不同类型服务,Session 共享体系以及自定义 Session 体系的完美融合(谁说微服务就一定用不到 Session :))。 - 新增
GRPC
服务间调用和通信方式,系统核心服务间调用支持OpenFeign
和GRPC
两种方式,可通过修改配置实现两种方式的切换。 - 基于
RSocket
全面重写WebSocket
消息系统,实现WebSocket
的响应式
改造以及RSocket
与 Spring Security 体系的全面集成。支持多实例、跨服务的私信和广播 - 新增 OAuth2 独立客户端,可用于客户端动态注册以及授权码模式
- 新增基于
Loki + Grafana
生态的轻量级日志中心和链路追踪解决方案,使用 OSS 作为数据存储,极大地降低资源需求,可作为原有 Skywalking 和 ELK 重量级体系的备选方案,根据实际需要切换。 - 开放纯手写动态表单功能。可实现BPMN、动态表单、Camunda 流程引擎的串联,实现工作流程运转(目前仅支持简单工作流)
- 开放包含自定义属性面板的 BPMN 在线设计器功能。
- 开放物联网设备认证和管理模块,支持基于 Emqx 的物联网设备通信和管理。
- 开放阿里云内容审核、百度 OCR、环信、Emqx、天眼查、Nacos、PolarisMash等第三方 OpenApi 封装模块
- 前端工程支持 Docker 运行,相关参数可通过配置环境变量修改。已上传至 Docker Hub,可以直接下载运行。
Dante Cloud 3.X 特性
1. 核心基础依赖便捷切换
- 新增
Spring Cloud Tencent
和Spring Cloud
原生微服务全家桶等两种基础设施支持。 - 新增
Spring Cloud Alibaba
、Spring Cloud Tencent
和Spring Cloud
原生微服务全家桶三种基础设值切换能力,可以以相对便捷的方式切换使用 Alibaba、Tencent、Spring 等基础设施环境。可根据自身实际需求选择,不再局限于只能在某一种基础设施环境中运行。
2. 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 Authorization Server
的、支持智能电视、IoT等物联网设备认证模式 - 无须在代码中配置
Spring Security
权限注解以及权限方法,即可实现接口鉴权以及权限的动态修改。采用分布式鉴权方案,规避 Gateway 统一鉴权的压力以及重复鉴权问题 - OAuth2 UserDetails 核心数据支持直连数据库获取和 Feign 远程调用两种模式。OAuth2 直连数据库模式性能更优,Feign 访问远程调用可扩展性更强。可通过配置动态修改采用策略方式。
3. 全体系化应用和开发特性集成
- 微服务架构全体系 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 二级缓存 - 平台统一错误处理,支持自定义错误码体系,有效集成
OAuth2
、Spring Validation
等多方错误体系并有机整合 HTTP 状态码。采用 Customizer 模式,采用错误码自动计算和创建模式,支持代码模块级错误码灵活定义扩展。响应结果更加多样灵活,反馈结果也更加人性化,便于理解和定位问题。 - 全体系 OkHttp 、HttpClient 统一化集成,实现 OkHttp 、HttpClient 与 RestTemplate 、Openfeign 一体化融合。统一使用 Feign 配置参数,对 OkHttp 、HttpClient 进行参数设定,可策略化选择设置使用 OkHttp 或 HttpClient 作为 RestTemplate 、Openfeign 统一的基础 HttpClient
4. 采用 pnpm monorepo
重构前端
- 未使用任何流行开源模版,使用全新技术栈,完全纯"手写"全新前端工程。
- 借鉴参考流行开源版本的使用和设计,新版前端界面风格和操作习惯尽量与当前流行方式统一。
- 充份使用 Typescript 语言特性,解决大量类型校验问题,尽可能规避 "any" 式的 Typescript 编程语言使用方式。
- 充份使用 Composition Api 和 Hooks 等 Vue3 框架新版特性进行代码编写。
- 充份利用 Component、Hooks 以及 Typescript 面向对象等特性,抽取通用组件和代码,尽可能降低工程重复代码。
- 对较多 Quasar 基础组件和应用功能组件进行封装,以方便代码的统一修改维护和开发使用。
- 对生产模式下,对基于 Vite3 的工程打包进行深度性能优化。
- 提供以 docker-compose 方式,对工程生产代码进行容器化打包和部署。
- 该版本基于 pnpm,采用 monorepo 模式对前端工程进行重构。构建 monorepo 版本前端,是为扩展更多功能、增加应用级功能做铺垫
- 抽取 utils、components、apis、bpmn-designer 等相关代码,形成共享模块。
- 共享模块已进行优化配置,可编译成独立的组件,单独以组件形式进行发布。
- 代码以共享模块的方式进行单独维护开发,降低现有工程代码复杂度,便于后续功能的扩展和代码的复用。
[二]技术选型
后端核心技术栈
(1)Spring 相关核心技术及版本
组件 | 版本 |
---|---|
Spring Boot | 3.4.1 |
Spring Cloud | 2024.0.0 |
Spring Cloud Alibaba | 2023.0.1.2 |
Spring Cloud Tencent | 1.13.2-2023.0.0 |
Spring Authorization Server | 1.4.1 |
Spring Boot Admin | 3.4.1 |
Nacos | 2.4.3 |
Sentinel | 1.8.8 |
Seata | 2.1.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
) - 数据库:
Postgresql
,MySQL
,Oracle
... - JSON 序列化:
Jackson
&FastJson
- 文件服务:阿里云 OSS/
Minio
- 数据调试:
p6spy
- 在线文档:
Springdoc
+Swagger 3
+OpenAPI
- 日志中心:
ELK
- 日志收集:
Logstash Logback Encoder
- 数据同步:
Debezimu
- 外部集成:
JustAuth
,WxJava
,多种短信 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 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 有效时间,权限范围等信息。 |
范围管理 | 创建终端权限范围,设置范围对应权限。 |
范围管理 | 创建终端权限范围,设置范围对应权限。 |
凭证管理 | Spring Authorization Server 分配的 Token 情况信息示。 |
操作日志 | 用户登录登出系统日志信息记录查看导出示。 |
机构管理 | 配置系统组织机构,支持树形结构展示。 |
部门管理 | 配置机构下属部门信息,支持树形机构展示。 |
人员管理 | 配置机构人员信息,为人员分配和创建用户信息。 |
归属管理 | 配置机构,部门和人员的归属关系,支持人员信息唯一,绑定标准机构,党团,工会等多种机构类型。避免针对不同机构类型为统一人员创建重复信息。此种结构设定,与Camunda 工作流人员体系一一对应。 |
用户统计 | 实时在线用户统计及同步实时刷新功能 |
站内消息 | 系统公告、私信对话浏览信息功能 |
信息提醒 | 私信、公告信息消息提醒 |
系统接口 | 根据业务代码自动生成相关的 api 接口文档。 |
服务监控 | 监视当前系统 CPU,内存,磁盘,堆栈等相关信息。 |
工作流编辑器 | 基于BPMN 2.0 标准的在线工作流模型编辑器,支持SVG ,XML 格式导入、导出、云端上传。 |
[五]安全测试
Dante Cloud 已通过由第三方公司进行的软件出厂安全测试。测试结果如下图所示:
说明
因涉及企业和项目信息,所以不便于再此展示具体测试报告。
Web 漏洞检测
采用相关扫描工具对应用系统进行漏洞扫描,根据漏洞扫描结果对存在的漏洞进行风险评估。初测共发现 2 个 Web 漏洞,其中高风险漏洞有 0 个,中风险漏洞有 1 个,低风险漏洞有 1 个。经过整改并复测后,高、中风险漏洞已整改完毕。
应用安全合规
针对等级保护三级系统的防护要求,对于应用安全涉及的“身份鉴别”、“访问控制”、“安全审计”、“剩余信息保护”、“通信完整性”、“通信保密性”以及“资源控制”等控制点进行
检查类别 | 检查内容 | 检查结果 |
---|---|---|
身份鉴别 | 应提供专用的登录控制模块对登录用户进行身份标识和鉴别 | 符合 |
身份鉴别 | 应对同一用户采用两种或两种以上组合的鉴别技术实现用户身份鉴别 | 符合 |
身份鉴别 | 应提供用户身份标识唯一和鉴别信息复杂度检查功能,保证应用系统中不存在重复用户身份标识,身份鉴别信息不易被冒用 | 符合 |
身份鉴别 | 应提供登录失败处理功能,可采取结束会话、限制非法登录次数和自动退出等措施 | 符合 |
身份鉴别 | 应启用身份鉴别、用户身份标识唯一性检查、用户身份鉴别信息复杂度检查以及登录失败处理功能,并根据安全策略配置相关参数 | 符合 |
访问控制 | 应提供访问控制功能,依据安全策略控制用户对文件、数据库表等客体的访问 | 符合 |
访问控制 | 访问控制的覆盖范围应包括与资源访问相关的主体、客体及它们之间的操作 | 符合 |
访问控制 | 应由授权主体配置访问控制策略,并严格限制默认帐户的访问权限 | 符合 |
访问控制 | 应授予不同帐户为完成各自承担任务所需的最小权限,并在它们之间形成相互制约的关系 | 符合 |
安全审计 | 应提供覆盖到每个用户的安全审计功能,对应用系统重要安全事件进行审计 | 符合 |
安全审计 | 应保证无法单独中断审计进程,无法删除、修改或覆盖审计记录 | 符合 |
安全审计 | 应提供对审计记录数据进行统计、查询、分析及生成审计报表的功能 | 符合 |
剩余信息保护 | 应保证用户鉴别信息所在的存储空间被释放或再分配给其他用户前得到完全清除,无论这些信息是存放在硬盘上还是在内存中 | 符合 |
剩余信息保护 | 应保证系统内的文件、目录和数据库记录等资源所在的存储空间被释放或重新分配给其他用户前得到完全清除 | 符合 |
通信完整性 | 应采用密码技术保证通信过程中数据的完整性 | 符合 |
通信保密性 | 在通信双方建立连接之前,应用系统应利用密码技术进行会话初始化验证 | 符合 |
通信保密性 | 应对通信过程中的整个报文或会话过程进行加密 | 符合 |
资源控制 | 当应用系统的通信双方中的一方在一段时间内未作任何响应,另一方应能够自动结束会话 | 符合 |
资源控制 | 应能够对系统的最大并发会话连接数进行限制 | 符合 |
资源控制 | 应能够对单个帐户的多重并发会话进行限制 | 符合 |
渗透测试结果
检测漏洞类型 | 检测结果 |
---|---|
XSS 跨站 | 符合 |
Sql 注入 | 符合 |
用户名密码明文传输 | 符合 |
伪造跨站请求 | 符合 |
越权访问 | 符合 |
上传漏洞 | 符合 |
敏感信息泄露 | 符合 |
目录遍历 | 符合 |
存在测试页面 | 符合 |
上传类型未验证 | 符合 |
慢速 ddos 攻击 | 符合 |
不安全的加密方法 | 符合 |
Oracle 数据库版本漏洞 | 符合 |
未设置 Httponly 标识 | 符合 |
Secure cookie 机制 | 符合 |
Struts 2 开发模式开启 | 符合 |
Weblogic Server Side Request Forgery | 符合 |
CRLF 注入 | 符合 |