欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-01-23 10:23:22
目录简介模块使用方法配置项说明开源链接总结简介mybatis-crypto 是一个基于 mybatis 插件机制实现的字段加解密组件,通过一个注解即可对敏感数据进行加解密处理。 支持自定义 encry...

简介

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 的密钥

开源链接

github.com/whitedg/myb…

总结

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