如何通过一个注解实现MyBatis字段加解密

 更新时间:2022年02月14日 09:59:54   作者:Wh1te  
用户隐私很重要,因此很多公司开始做数据加减密改造,下面这篇文章主要给大家介绍了关于如何通过一个注解实现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-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字段加解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Java中Method的Invoke方法

    详解Java中Method的Invoke方法

    这篇文章主要介绍了详解Java中Method的Invoke方法,需要的朋友可以参考下
    2017-10-10
  • Java SPI的简单小实例

    Java SPI的简单小实例

    这篇文章主要介绍了Java SPI的简单小实例,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Java面试题解析之判断以及防止SQL注入

    Java面试题解析之判断以及防止SQL注入

    这篇文章主要介绍了Java面试题解析之判断以及防止SQL注入,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Java中Lambda表达式基础及使用

    Java中Lambda表达式基础及使用

    这篇文章主要介绍了Lambda 是JDK 8 的重要新特性。它允许把函数作为一个方法的参数(函数作为参数传递进方法中),使用 Lambda 表达式可以使代码变的更加简洁紧凑,使Java代码更加优雅,感兴趣的小伙伴一起来学习吧
    2021-08-08
  • Nacos-SpringBoot框架启动不加载bootstrap.yml的解决

    Nacos-SpringBoot框架启动不加载bootstrap.yml的解决

    这篇文章主要介绍了Nacos-SpringBoot框架启动不加载bootstrap.yml的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • SSH 框架简介

    SSH 框架简介

    SSH是 struts+spring+hibernate的一个集成框架,是目前较流行的一种web应用程序开源框架。本文给大家详细看一下组成SSH的这三个框架
    2017-09-09
  • Java AQS中ReentrantReadWriteLock读写锁的使用

    Java AQS中ReentrantReadWriteLock读写锁的使用

    ReentrantReadWriteLock称为读写锁,它提供一个读锁,支持多个线程共享同一把锁。这篇文章主要讲解一下ReentrantReadWriteLock的使用和应用场景,感兴趣的可以了解一下
    2023-02-02
  • 优化Java虚拟机总结(jvm调优)

    优化Java虚拟机总结(jvm调优)

    这篇文章主要介绍了优化Java虚拟机总结(jvm调优),具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • IntelliJ IDEA 2023版本创建Spring项目时Java只能选择17或21的问题解决方法

    IntelliJ IDEA 2023版本创建Spring项目时Java只能选择17或21的问题解决方法

    spring-boot是一个基于Java的开源框架,用于快速构建生产级别的应用程序,这篇文章主要给大家介绍了关于IntelliJ IDEA 2023版本创建Spring项目时Java只能选择17或21的问题解决方法,需要的朋友可以参考下
    2024-07-07
  • Java 详细讲解用堆解决Top-k问题

    Java 详细讲解用堆解决Top-k问题

    TopK问题即在N个数中找出最大的前K个,这篇文章将详细讲解如何利用小根堆的方法解决TopK问题,文中代码具有一定参考价值,快跟随小编一起学习一下吧
    2022-04-04

最新评论