zuihou-admin-cloud 2.1 发布,租户模式支持动态新增数据源

栏目: 软件资讯 · 发布时间: 4年前

内容简介:今日更新日志: 新增: 1. 新增认证服务(zuihou-oauth-server:负责登录、获取用户所有权限、资源、菜单等功能) 2. 参照SpringSecurity原理,调整 认证服务登录、刷新token等 接口相关逻辑 3. 参照SpringSecurit...

今日更新日志:

新增:

1. 新增认证服务(zuihou-oauth-server:负责登录、获取用户所有权限、资源、菜单等功能)
2. 参照SpringSecurity原理,调整 认证服务登录、刷新token等 接口相关逻辑
3. 参照SpringSecurity原理,新增 zuihou-security-starter 模块,实现 URI权限配置 和 鉴权
4. 新增 租户模式 支持多数据源模式:动态增减数据源,一个租户一个库一个数据源
5. 多数据源模式相关代码和配置,调整成一键切换模式
6. 新增多数据源模式完美支持分布式事务(seata 1.0.0) 
7. 新增删除租户时,删除租户数据和数据库的接口,并删除该租户的数据源
8. 新增记录在线用户功能 & 主动T人下线功能

优化:

1. 重写token生成规则和方法
2. 优化用户登录逻辑,根据配置决定是否限制用户重复登录、多端登录。
3. 登录日志改成发布事件的方式。
4. 移除 zuihou-shiro-starter 和 zuihou-user-starter 模块
5. 移除 zuihou-zuul-* 模块中没用的几个模块
6. 优化swagger配置,支持接口认证等参数
7. 配置文件调整:zuihou.database.bizDatabase -> zuihou.database.tenantDatabasePrefix
8. 将分散在各个服务的枚举接口(/enums)合并到 Oauth 服务,前端在登录之后,一次性拉取存放在前端缓存中。
9. 日志统一存储路径: logging.file.path 移动到 src/main/filters/config-dev.properties 统一配置
10. 将租户模块相关代码独立到权限服务的 zuihou-tenant-** 模块中,降低代码耦合度,增强系统的独立性。(有条件的朋友,完全可以将租户模块独立成一个服务)
11. 将非租户模式、字段租户模式、SCHEMA/数据源租户模式的数据库脚本区分开。
12. 简化租户后台系统相关接口逻辑 (zuihou-admin-ui)
13. 废除之前的配置在Controller层的声明式事务配置,采用注解配置事务,调整事务控制到service层,通过注解来控制事务,原因是兼容多数据源模式。
14. SuperCacheServiceImpl 相关方法加上事务注解。
15. SuperCacheServiceImpl 相关操作缓存的方法去除@Cache注解,采用cacheChanel方式,防止子类this调用时,无法使用缓存的bug
16. 拆分上下文拦截器,将租户信息、MDC分离到 拦截器TenantContextHandlerInterceptor(封装租户相关请求头)、MdcHandlerInterceptor(封装日志相关线程变量)
17. 优化操作日志相关配置,实现根据条件实例不同的bean
18. 简化order和demo服务的分布式事务配置 
19. SpringUtils类增加发布事件的静态方法
20. 废弃IgnoreTokenConfig,调整为配置文件方式: IgnoreTokenProperties

修复:

1. 修复UserQuery构造方法报NPE的bug  # fix I1BXPW
2.修复个人中心修改资料的bug   # fix I1CIEN
3. 完善租户模块相关功能,并修复一个弱智bug

 

升级指南:

1. 更新 zuihou-admin-cloud, 待依赖更新完毕后,根据IDEA提示,删除zuihou-zuul-base、zuihou-zuul-authentication、zuihou-zuul-ratelimit 等模块
2. 若要更新zuihou-commons(该项目已经发布中央仓库,若不想看源码,可以不用管),待依赖更新完毕后,根据IDEA提示,删除zuihou-user-starter、zuihou-shiro-starter等模块
3. 编译项目
4. 重新导入 数据库脚本      (数据库改动较大,请务必重新执行,执行时,看着: docs/sql/脚本说明.md 根据自身情况导入脚本)
5. 重新导入 nacos 配置文件  (配置文件改动很大,删除合并了很多配置)
6. 启动项目

租户模式:

租户模式 描述 优点 缺点 分布式事务
NONE(非租户模式)  没有租户 简单、适合独立系统 缺少租户系统的便利性 支持
COLUMN(字段模式) 租户共用一个数据库,在业务表中增加字段来区分   简单、不复杂、开发无感知  数据隔离性差、安全性差、数据备份和恢复困难 支持
SCHEMA(独立schema)  每个租户独立一个 数据库(schema),执行 sql 时,动态在表名前增加schema 简单、开发无感知、数据隔离性好 配置文件中必须配置数据库的root账号、不支持复杂sql和 sql嵌套自定义函数 存在bug
DATASOURCE(独立数据源)  每个租户独立一个 数据库(数据源),执行代码时,动态切换数据源 可独立部署数据库,数据隔离性好、扩展性高、故障影响小 相对复杂、开发需要注意切换数据源时的事务问题、需要较多的数据库 支持

简介:


基于`SpringCloud(Hoxton.SR1)`  + `SpringBoot(2.2.5.RELEASE)` 的 SaaS型微服务脚手架,具备用户管理、资源权限管理、网关统一鉴权、Xss防跨站攻击、自动代码生成、多存储系统、分布式事务、分布式定时任务等多个模块,支持多业务系统并行开发,支持多服务并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,非常适合学习使用。核心技术采用Nacos、Fegin、Ribbon、Zuul、Hystrix、JWT Token、Mybatis、SpringBoot、Seata、Nacos、Sentinel、RabbitMQ、FastDFS等主要框架和中间件。

希望能努力打造一套从 SaaS基础框架 - 分布式微服务架构 - 自动化部署 - 系统监测 的解决方案。本项目旨在实现基础能力,不涉及具体业务。
 

功能点介绍:

服务注册与调用:

基于Eureka来实现的服务注册与调用,在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。

 服务鉴权:

通过JWT的方式来加强服务之间调度的权限验证,保证内部服务的安全性。

负载均衡:

将服务保留的rest进行代理和网关控制,除了平常经常使用的node.js、nginx外,Spring Cloud系列的zuul和ribbon,可以帮我们进行正常的网关管控和负载均衡。其中扩展和借鉴国外项目的扩展基于JWT的Zuul限流插件,方面进行限流。

 熔断机制:

因为采取了服务的分布,为了避免服务之间的调用“雪崩”,采用了Hystrix的作为熔断器,避免了服务之间的“雪崩”。

监控:

利用Spring Boot Admin 来监控各个独立Service的运行状态;利用turbine来实时查看接口的运行状态和调用频率;通过Zipkin来查看各个服务之间的调用链等。

数据权限:

利用基于Mybatis的DataScopeInterceptor拦截器实现了简单的数据权限

SaaS的无感解决方案:

使用Mybatis拦截器实现对所有SQL的拦截,修改默认的Schema,从而实现多租户数据隔离的目的。

二级缓存:

采用J2Cache操作缓存,第一级缓存使用内存(Caffeine),第二级缓存使用 Redis。 由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目标是降低对 L2 的读取次数。 该缓存框架主要用于集群环境中。单机也可使用,用于避免应用重启导致的缓存冷启动后对后端业务的冲击。

优雅的Bean转换:

采用Dozer组件来对 DTO、DO、PO等对象的优化转换

前后端统一表单验证:

严谨的表单验证通常需要 前端+后端同时验证, 但传统的项目,均只能前后端各做一次检验, 后期规则变更,又得前后端同时修改。 故在hibernate-validator的基础上封装了zuihou-validator-starter起步依赖,提供一个通用接口,可以获取需要校验表单的规则,然后前端使用后端返回的规则, 以后若规则改变,只需要后端修改即可。

防跨站脚本攻击(XSS):

  •      通过过滤器对所有请求中的 表单参数 进行过滤
  •      通过Json反序列化器实现对所有 application/json 类型的参数 进行过滤

当前用户信息注入器:

 通过注解实现用户身份注入

在线API:

由于原生swagger-ui某些功能支持不够友好,故采用了国内开源的 knife4j ,并制作了stater,方便springboot用户使用。

代码生成器:

基于Mybatis-plus-generator自定义了一套代码生成器, 通过配置数据库字段的注释,自动生成枚举类、数据字典注解、SaveDTO、UpdateDTO、表单验证规则注解、Swagger注解等。

定时任务调度器:

基于xxl-jobs进行了功能增强。(如:指定时间发送任务、执行器和调度器合并项目、多数据源)

汉化 Eureka 注册中心页面:

请切换分支进行查看

大文件/断点/分片续传:

前端采用webupload.js、后端采用NIO实现了大文件断点分片续传,启动Eureka、Zuul、File服务后,直接打开docs/chunkUploadDemo/demo.html即可进行测试。 经测试,本地限制堆栈最大内存128M启动File服务,5分钟内能成功上传4.6G+的大文件,正式服耗时则会受到用户带宽和服务器带宽的影响,时间比较长。

分布式事务:

集成了阿里的分布式事务中间件:seata,以 高效 并且对业务 0侵入 的方式,解决 微服务 场景下面临的分布式事务问题。

灰度发布:
    
为了解决频繁的服务更新上线,版本回退,快速迭代,公司内部协同开发,本项目采用修改ribbon的负载均衡策略来实现来灰度发布。     

关联数据自动注入:

用于解决跨表、跨库、跨服务分页数据的属性或单个对象的属性 回显关联数据之痛, 支持对静态数据属性(数据字典)、动态主键数据进行自动注入。

项目代码地址

项目 gitee github 备注
微服务项目 https://gitee.com/zuihou111/zuihou-admin-cloud https://github.com/zuihou/zuihou-admin-cloud SpringCloud 版本后端代码
单体项目 https://gitee.com/zuihou111/zuihou-admin-boot https://github.com/zuihou/zuihou-admin-boot SpringBoot 版本后端代码
租户后台 https://gitee.com/zuihou111/zuihou-ui https://github.com/zuihou/zuihou-ui | 给客户使用的前端
开发&运营后台 https://gitee.com/zuihou111/zuihou-admin-ui https://github.com/zuihou/zuihou-admin-ui 给公司内部开发&运营&运维等人员使用
代码生成器 https://gitee.com/zuihou111/zuihou-generator https://github.com/zuihou/zuihou-generator 开发人员使用
核心 工具 https://gitee.com/zuihou111/zuihou-commons https://github.com/zuihou/zuihou-commons 核心工具包

演示地址 (演示账号没有写权限,只能查询)

项目 演示地址 管理员账号 普通账号
租户后台 http://tangyh.top:10000/zuihou-ui zuihou/zuihou test/zuiou
开发&运营后台 http://tangyh.top:180/zuihou-admin-ui demoAdmin/zuihou

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Domain-Driven Design Distilled

Domain-Driven Design Distilled

Vaughn Vernon / Addison-Wesley Professional / 2016-6-2 / USD 36.99

Domain-Driven Design (DDD) software modeling delivers powerful results in practice, not just in theory, which is why developers worldwide are rapidly moving to adopt it. Now, for the first time, there......一起来看看 《Domain-Driven Design Distilled》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试