这篇文章主要讲解了“怎么通过一个注解实现MyBatis字段加解密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么通过一个注解实现MyBatis字段加解密”吧!
简介
mybatis-crypto 是一个基于 mybatis 插件机制实现的字段加解密组件,通过一个注解即可对敏感数据进行加解密处理。 支持自定义 Encryptor、特殊字段单独指定 Encryptor 和 key ,满足大部分使用场景。
模块
mybatis-crypto 包括三个模块:
mybatis-crypto-core 插件的核心功能模块
mybatis-crypto-spring-boot-starter 提供了 Spring boot 快速整合功能
mybatis-crypto-encryptors 提供了一些 IEncryptor 实现
使用方法
引入依赖
<dependency> <groupId>io.github.whitedg</groupId> <artifactId>mybatis-crypto-spring-boot-starter</artifactId> <version>${latest.version}</version></dependency>
实现 IEncryptor
import io.github.whitedg.mybatis.crypto.IEncryptor;public class MyEncryptor implements IEncryptor { @Override public String encrypt(Object val2bEncrypted, String key) throws Exception { // 实现这个方法返回加密后的数据 return "encrypted string"; } @Override public String decrypt(Object val2bDecrypted, String key) throws Exception { // 实现这个方法返回解密后的数据 return "decrypted string"; }}
或者引入 mybatis-crypto-encryptors
<dependency> <groupId>io.github.whitedg</groupId> <artifactId>mybatis-crypto-encryptors</artifactId> <version>${latest.version}</version></dependency>
使用其提供的 Encryptor:
io.github.whitedg.mybatis.crypto.Base64Encryptor
io.github.whitedg.mybatis.crypto.BasicTextEncryptor
io.github.whitedg.mybatis.crypto.AES256Encryptor
io.github.whitedg.mybatis.crypto.StrongTextEncryptor
添加配置
mybatis-crypto: # 是否启用插件,默认 true enabled: true # 快速失败,默认 true fail-fast: false # 全局默认 Encryptor default-encryptor: io.github.whitedg.mybatis.crypto.BasicTextEncryptor # Encryptor 默认密钥 default-key: global-key # mybatis @Param 注解下需要加解密的参数 key 前缀 mapped-key-prefixes: et,encrypted
指定加密字段
在需要加解密的字段上添加注解 @EncryptedField
public class User { @EncryptedField private String encryptedStr; @EncryptedField(encryptor = YourEncryptor.class, key = "Your Key") private String customizedStr;}
使用配置的 @Param 参数 key 前缀
import org.apache.ibatis.annotations.Param;interface YourEntityMapper { int insert(@Param("et") YourEntity entity); // 支持数组 int batchInsert(@Param("encrypted-entities") List<YourEntity> entity); // 返回值也支持单个对象或数组 YourEntity selectOne(); List<YourEntity> selectList();}
Demo
配置项说明
配置项 | 说明 | 默认值 |
---|---|---|
mybatis-crypto.enabled | 是否启用 mybatis-crypto | true |
mybatis-crypto.fail-fast | 快速失败,加解密过程中发生异常是否中断。true:抛出异常,false:使用原始值,打印 warn 级别日志 | true |
mybatis-crypto.mapped-key-prefixes | @Param 参数名的前缀,前缀匹配则会进行加密处理 | 空 |
mybatis-crypto.default-encryptor | 全局默认 Encryptor | 空 |
mybatis-crypto.default-key | 全局默认 Encryptor 的密钥 | 空 |
感谢各位的阅读,以上就是“怎么通过一个注解实现MyBatis字段加解密”的内容了,经过本文的学习后,相信大家对怎么通过一个注解实现MyBatis字段加解密这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!