如何通過一個註解實現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 的密鑰

開源鏈接

github.com/WhiteDG/myb…

總結

到此這篇關於如何通過一個註解實現MyBatis字段加解密的文章就介紹到這瞭,更多相關註解實現MyBatis字段加解密內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: