经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
如何通过一个注解实现MyBatis字段加解密
来源:jb51  时间:2022/2/14 11:35:53  对本文有异议

简介

mybatis-crypto 是一个基于 mybatis 插件机制实现的字段加解密组件,通过一个注解即可对敏感数据进行加解密处理。 支持自定义 Encryptor、特殊字段单独指定 Encryptor 和 key ,满足大部分使用场景。

模块

mybatis-crypto 包括三个模块:

  • mybatis-crypto-core 插件的核心功能模块
  • mybatis-crypto-spring-boot-starter 提供了 Spring boot 快速整合功能
  • mybatis-crypto-encryptors 提供了一些 IEncryptor 实现

使用方法

引入依赖

  1. <dependency>
  2. <groupId>io.github.whitedg</groupId>
  3. <artifactId>mybatis-crypto-spring-boot-starter</artifactId>
  4. <version>${latest.version}</version>
  5. </dependency>

实现 IEncryptor

  1. import io.github.whitedg.mybatis.crypto.IEncryptor;
  2. public class MyEncryptor implements IEncryptor {
  3. @Override
  4. public String encrypt(Object val2bEncrypted, String key) throws Exception {
  5. // 实现这个方法返回加密后的数据
  6. return "encrypted string";
  7. }
  8.  
  9. @Override
  10. public String decrypt(Object val2bDecrypted, String key) throws Exception {
  11. // 实现这个方法返回解密后的数据
  12. return "decrypted string";
  13. }
  14. }

或者引入 mybatis-crypto-encryptors

  1. <dependency>
  2. <groupId>io.github.whitedg</groupId>
  3. <artifactId>mybatis-crypto-encryptors</artifactId>
  4. <version>${latest.version}</version>
  5. </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

添加配置

  1. mybatis-crypto:
  2. # 是否启用插件,默认 true
  3. enabled: true
  4. # 快速失败,默认 true
  5. fail-fast: false
  6. # 全局默认 Encryptor
  7. default-encryptor: io.github.whitedg.mybatis.crypto.BasicTextEncryptor
  8. # Encryptor 默认密钥
  9. default-key: global-key
  10. # mybatis @Param 注解下需要加解密的参数 key 前缀
  11. mapped-key-prefixes: et,encrypted

指定加密字段

  • 在需要加解密的字段上添加注解 @EncryptedField
  1. public class User {
  2. @EncryptedField
  3. private String encryptedStr;
  4.  
  5. @EncryptedField(encryptor = YourEncryptor.class, key = "Your Key")
  6. private String customizedStr;
  7. }
  • 使用配置的 @Param 参数 key 前缀
  1. import org.apache.ibatis.annotations.Param;
  2. interface YourEntityMapper {
  3. int insert(@Param("et") YourEntity entity);
  4. // 支持数组
  5. int batchInsert(@Param("encrypted-entities") List<YourEntity> entity);
  6. // 返回值也支持单个对象或数组
  7. YourEntity selectOne();
  8. List<YourEntity> selectList();
  9. }

Demo

配置项说明

配置项说明默认值
mybatis-crypto.enabled是否启用 mybatis-cryptotrue
mybatis-crypto.fail-fast快速失败,加解密过程中发生异常是否中断。true:抛出异常,false:使用原始值,打印 warn 级别日志true
mybatis-crypto.mapped-key-prefixes@Param 参数名的前缀,前缀匹配则会进行加密处理
mybatis-crypto.default-encryptor全局默认 Encryptor
mybatis-crypto.default-key全局默认 Encryptor 的密钥

开源链接

github.com/WhiteDG/myb…

总结

到此这篇关于如何通过一个注解实现MyBatis字段加解密的文章就介绍到这了,更多相关注解实现MyBatis字段加解密内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号