yue-library简介
yue-library是一个基于SpringBoot封装的增强库
- 丰富的Java工具类库
- 优越的ORM框架
- 优雅的业务封装
- 优化的Spring环境配置
- 完善的规约限制
- 配套的代码生成平台
- 安稳贴切的开源架构方案
- 主要变更:升级SpringBoot到2.6.x,实现依赖优化与版本控制,加入grpc与plumelog,优化逻辑删除与物理删除分离
- 主要新特性:数据脱敏、数据审计、数据填充
新特性
- 【base】移除过期的UUIDUtils,用IdUtils代替
- 【jdbc】新增数据脱敏特性,请求加密,响应解密
- 【jdbc】数据脱敏:支持全局密钥配置于表级密钥配置,支持对表中某个字段配置
- 【jdbc】数据脱敏:支持AES、SM4(国密)、自定义加密机等用于脱敏处理
- 【jdbc】新增数据审计特性,增删改操作自动记录操作人
- 【jdbc】数据审计:支持使用配置一键开关需要进行审计的表、支持反向配置不审计的表
- 【jdbc】数据审计:支持自定义审计字段、审计用户
- 【jdbc】数据审计:规范数据审计字段命名并增加创建人、更新人、删除人为默认审计字段
- 【jdbc】新增数据填充特性,用于UUID,租户ID自动填充
- 【jdbc】数据填充:支持使用配置一键开关需要进行填充的表、支持反向配置不填充的表
- 【jdbc】数据填充:支持数据新增时填充,数据更新时填充
- 【jdbc】逻辑删除:完善逻辑删除与物理删除彻底分离,规范逻辑删除方法
- 【jdbc】新增insertAndReturnUuid()方法:插入时返回uuid
- 【jdbc】新增insertAndReturnFields()方法:插入时自定义返回需要的字段
- 【docs】完善jdbc文档,新增配置示例文档、db boolen示例、打印可执行SQL示例、基础的DDL表结构示例、添加Spring JDBC教程
- 【docs】完善数据库设计与交付规约:数据库枚举规约、多租户介绍
- 【docs】完善服务端规约:提供IDE配置模板
- 【docs】完善grpc规约:proto规约、工程结构规范、工程依赖规约、rpc接口版本控制规约
- 【docs】完善服务端工程结构规约:包名规约、Service/DAO层方法命名规约、POJO领域模型命名规约
- 【template-boot】优化并完善示例项目,上手更简单直观
Bug修复
- 【template-boot】修正因SpringBoot2.4版本新的配置文件机制,导致的启动失败 #I40ONA
Maven关键依赖库
👉Maven详细依赖定义见pom.xml文件
依赖库 | 依赖版本 |
---|
spring-boot | 2.6.3 | spring-cloud | 2021.0.1 | spring-cloud-alibaba | 2021.0.1.0 | hutool | 5.7.22 | fastjson | 1.2.79 |
工程结构
. yue-library
├── yue-library
│ ├── yue-library-dependencies dependencies版本控制
│ ├── yue-library-base 基础核心模块,提供丰富的Java工具类库、接口参数校验、类型转换器等
│ ├── yue-library-base-crypto 加解密模块,提供对称、非对称和摘要算法、密钥交换加解密等
│ ├── yue-library-web WebMvc模块,servlet编程,提供请求与响应参数的包装与解析等
│ ├── yue-library-webflux WebFlux实现,响应式编程(如:SpringCloudGateway)
│ ├── yue-library-data-jdbc ORM框架,基于SpringJdbc,拥有着强大性能的同时又不失简单灵活等
│ ├── yue-library-data-redis Redis客户端,基于SpringRedis,更简单灵活,提供分布式锁等
│ ├── yue-library-auth-service OAuth2认证模块,基于SpringSecurity,更简单灵活,提供全局token与登录等
│ ├── yue-library-auth-client OAuth2客户端模块,提供获取当前登录用户状态信息等
│ └── yue-library-pay 支付模块,基于pay-java-parent,让你真正做到一行代码实现支付聚合
└── yue-library-samples
├── yue-library-test web测试项目,提供详细的特性使用示例、接口单元测试
├── yue-library-test-webflux webflux测试项目,提供详细的特性使用示例、接口单元测试
├── yue-library-template-boot SpringBoot项目模版,提供快速开发示例
└── yue-library-template-cloud SpringCloud项目模版,SOA共享架构(阿里巴巴中台)
快速开始
引入项目依赖
maven项目,在pom.xml文件中添加如下一段代码,并将${version} 替换为对应版本号:
<parent>
<groupId>ai.ylyue</groupId>
<artifactId>yue-library-dependencies</artifactId>
<version>${version}</version>
</parent>
随后引入所需要的模块,如WebMvc项目引入:yue-library-web
依赖说明:yue-library-base 为基础模块,一般情况下不需要单独引入,如:web、data-jdbc、data-redis等模块皆已默认依赖。
<dependencies>
<dependency>
<groupId>ai.ylyue</groupId>
<artifactId>yue-library-web</artifactId>
</dependency>
...
</dependencies>
启动项目
新建一个SpringBoot main 方法启动类:
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(TestApplication.class, args);
}
}
写一个测试接口:
@RestController
@RequestMapping("/quickstart")
public class QuickstartController {
@GetMapping("/get")
public Result<?> get(JSONObject paramJson) {
return ResultInfo.success(paramJson);
}
}
访问接口测试,如:http://localhost:8080/quickstart/get
{
"code": 200,
"msg": "成功",
"flag": true,
"count": null,
"data": {}
}
上述代码完全保持了SpringBoot的风格,但又使用到了yue-library的增强特性,如:
- HTTP消息转换器支持使用Alibaba Fastjson作为参数获取对象
- 请求参数智能解析,无需再为URL query-string、Body from-data、Body application/json传参方式烦恼
- 错误时会对异常进行统一处理,响应RESTful风格的错误提示
- 支持前端跨域请求
当然除了这些已使用到的特性之外,你还可以尝试如:响应时间类型时自动格式化、请求参数校验、API接口版本控制、反复读取Servlet输入流等。 并且在yue-library-samples 目录下,存放着不同架构类型的示例模板,你可以根据自身需求选择,从而快速上手。
数据脱敏
数据脱敏作为安全层面的大范围话题,包含:数据存储加密、数据展示脱敏等多方面,这里主要实现的是数据存储加密的优雅解决方案。
数据存储加密解决方案实现,一般分为直接开干方式与优雅实现两种:
- 直接开干方式,无非依托于程序员自身,对业务字段进行单独处理,大家实现方式不一,水平不一,实现容易维护苦难
- 优雅实现依托于技术框架底层实现,对需要的字段进行存储加密取出解密,可以定制不同字段不同加密方案,相对优雅简洁少操心
应用场景
数据存储加解密的实现一般又分为两种,不可逆与对称加密。
- 不可逆一般用于像用户密码这样的场景,只需匹配查询,无需解密查看。需求量较小,开发者一般自行处理
- 对称加密大量用于像手机号、身份证号、邮箱等数据,进行存储加密,业务字段多繁杂,不仅需要查询加密可逆,又需保障安全,不能只使用一种加密算法
yue-library解决的就是需要大量对称加解密处理的场景,不同的字段可才有不同的密钥与加密算法,存储自动加密,查询自动匹配与解密。
使用限制
jdbcQueryxxx 开头的查询方法暂时不支持查询参数自动加密匹配,因为SQL中使用? 作为占位符,无法解析具体第几个参数是需要加密的
queryForxxx 开头的查询方法暂时不支持查询参数自动加密匹配,因为这是基础查询方法,容易出现多重加密错误。 我们可以采用调用public void dataEncrypt(String tableName, JSONObject... paramJsons) 方法,将参数实现处理,然后传入到queryForxxx 方法中,解决此问题。
如何使用
- 配置脱敏字段与加密算法
yue:
jdbc:
data-encrypt-algorithm: AES
data-encrypt-key: 1234567890123456
data-encrypt-configs:
data_encrypt:
data-encrypt-algorithm: AES
data-encrypt-key: 1234567890123455
fieldNames:
- cellphone
- password
data_encrypt_2:
fieldNames:
- email
- password
- 使用测试
- 使用
db.insertXXX() 方法测试加密存储 - 使用
db.deleteXXX() 方法测试条件自动加密匹配 - 使用
db.updateXXX() 方法测试条件自动加密匹配与更新内容加密存储 - 使用
db.getXXX() 、db.listXXX() 、db.pageXXX() 方法测试条件自动加密匹配查,存储数据自动解密
查询自动解密
查询自动解密,只支持DO实体类映射方式,并且类上面需要使用org.springframework.data.relational.core.mapping.@Table 注解声明解密表名,如下:
@Table("data_encrypt")
public class DataEncryptDO extends BaseCamelCaseDO {
}
当我们使用Json查询数据时,可以调用public void dataDecrypt(String tableName, JSONObject... resultJsons) 方法,将结果进行解密。
数据审计
数据审计用于记录对数据执行增删改动作的操作人,结合数据版本控制可达到数据360安全审计效果,结合操作日志可对一起链路操作进行追踪溯源。
如何使用
- 添加配置
yue:
jdbc:
data-audit-table-name-match-enum: match
data-audit-table-names:
- data_audit
- data_audit2
- data_audit3
- 提供审计用户信息,实现
AuditUserProvider 接口并配置为Bean
@Bean
public AuditUserProvider auditUserProvider() {
return new AuditUserProvider() {
@Override
public String getUser() {
return "ylyue";
}
@Override
public String getUserUuid() {
return "8fb1e1556cc84ba880d5a794e7b5f9e7";
}
};
}
- 测试
- 调用
db.insertXXX() 方法,测试数据创建人审计 - 调用
db.deleteLogicXXX() 方法,测试数据删除人审计 - 调用
db.updateXXX() 方法,测试数据更新人审计
自定义审计字段名
yue:
jdbc:
data-audit-properties:
field-name-create-user: create_user
field_name_create_user_uuid: create_user_uuid
field_name_create_time: create_time
field_name_update_user: update_user
field_name_update_user_uuid: update_user_uuid
field_name_update_time: update_time
field_name_delete_user: delete_user
field_name_delete_user_uuid: delete_user_uuid
field_name_delete_time: delete_time
数据填充、逻辑删除等新特性见官方文档
对比脚手架
yue-library正在计划提供属于自身的脚手架项目,但相比于单纯的脚手架项目,他更具有以下几点优势:
- 简单易学:优雅的实现各个功能特性,并配备了完善的说明文档
- 轻松引用:不同于脚手架,对于现有的SpringBoot项目也可以引入yue-library
- 更易升级:以spring-boot-starter的方式提供支持,可随时跟进最新稳定版本
- 无需维护:开发者只需专注自身业务逻辑实现,并熟练运用你所使用的特性
- 灵活选取:你可以随时弃用yue-library保留SpringBoot原生使用
收藏一波以表支持吧(≧▽≦)/!
|