SpringBoot 增强库 yue-library 2.6.0 发布,数据脱敏、数据审计、数据填充

yl-yue
 yl-yue
发布于 2022年05月11日
收藏 32

logo

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关键依赖库

:point_right: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}替换为对应版本号:Maven Central with version prefix filter

<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方法中,解决此问题。

如何使用

  1. 配置脱敏字段与加密算法
yue:
  jdbc:
    data-encrypt-algorithm: AES            # 缺省数据加密算法(仅当在表级未配置单独的加密算法时,以缺省值的方式生效)
    data-encrypt-key: 1234567890123456     # 缺省数据加密密钥(仅当在表级未配置单独的加密密钥时,以缺省值的方式生效)
    data-encrypt-configs:                  # 数据加密配置(key:表名,value:数据加密规则)
      data_encrypt:                        # 数据库对应的表名
        data-encrypt-algorithm: AES        # 当前表加密算法(未设置使用缺省值)
        data-encrypt-key: 1234567890123455 # 当前表加密密钥(未设置使用缺省值)
        fieldNames:                        # 加密字段
          - cellphone
          - password
      data_encrypt_2:                      # 数据库对应的表名
        fieldNames:                        # 加密字段
          - email
          - password
  1. 使用测试
  • 使用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安全审计效果,结合操作日志可对一起链路操作进行追踪溯源。

如何使用

  1. 添加配置
yue:
  jdbc:
    data-audit-table-name-match-enum: match                 # 数据审计表名匹配方式
    data-audit-table-names:                                 # 数据审计表名 
      - data_audit
	  - data_audit2
	  - data_audit3
  1. 提供审计用户信息,实现AuditUserProvider接口并配置为Bean
@Bean
public AuditUserProvider auditUserProvider() {
	return new AuditUserProvider() {
		// 在你的应用程序中,如何获得当前用户信息,一般从Token中获取
		@Override
		public String getUser() {
			return "ylyue";
		}

		@Override
		public String getUserUuid() {
			return "8fb1e1556cc84ba880d5a794e7b5f9e7";
		}
	};
}
  1. 测试
  • 调用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原生使用

收藏一波以表支持吧(≧▽≦)/!

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:SpringBoot 增强库 yue-library 2.6.0 发布,数据脱敏、数据审计、数据填充
加载中
返回顶部
顶部