如何通过一个注解实现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字段加解密内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mybatis-plus 拦截器敏感字段加解密的实现

    目录 背景 一.查询拦截器 二.插入和更新拦截器 三.注解 背景 数据库在保存数据时,对于某些敏感数据需要脱敏或者加密处理,如果一个一个的去加显然工作量大而且容易出错,这个时候可以考虑使用拦截器,本文针对的是mybatis-plus作为持久层框架,其他场景未测试.代码如下: 一.查询拦截器 package com.sfpay.merchant.service.interceptor; import com.baomidou.mybatisplus.core.toolkit.CollectionU

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

    目录 简介 模块 使用方法 配置项说明 开源链接 总结 简介 mybatis-crypto 是一个基于 mybatis 插件机制实现的字段加解密组件,通过一个注解即可对敏感数据进行加解密处理. 支持自定义 Encryptor.特殊字段单独指定 Encryptor 和 key ,满足大部分使用场景. 模块 mybatis-crypto 包括三个模块: mybatis-crypto-core 插件的核心功能模块 mybatis-crypto-spring-boot-starter 提供了 Sprin

  • 透明化Sharding-JDBC数据库字段加解密方案

    目录 前言 背景 前序 需求场景分析 处理流程详解 整体架构 脱敏规则 脱敏处理过程 解决方案详解 新上线业务 已上线业务改造 系统迁移前 系统迁移中 系统迁移后 中间件脱敏服务优势 适用场景说明 限制条件 加密策略解析 SHARDINGENCRYPTOR SHARDINGQUERYASSISTEDENCRYPTOR 后续 前言 近期,博主公司应安全审计要求,需要对数据库中的用户关键信息做加密处理,这样,即使生产数据被脱裤,也不会泄露用户的敏感信息,在做了初步的需求归纳和功能分析后,我们制定了简

  • Mybatis的TypeHandler加解密数据实现

    一.背景 在我们数据库中有些时候会保存一些用户的敏感信息,比如: 手机号.银行卡等信息,如果这些信息以明文的方式保存,那么是不安全的.假如: 黑客黑进了数据库,或者离职人员导出了数据,那么就可能导致这些敏感数据的泄漏.因此我们就需要找到一种方法来解决这个问题. 二.解决方案 由于我们系统中使用了Mybatis作为数据库持久层,因此决定使用Mybatis的TypeHandler或Plugin来解决. TypeHandler : 需要我们在某些列上手动指定 typeHandler 来选择使用那个ty

  • 详解Mybatis拦截器安全加解密MySQL数据实战

    需求背景 公司为了通过一些金融安全指标(政策问题)和防止数据泄漏,需要对用户敏感数据进行加密,所以在公司项目中所有存储了用户信息的数据库都需要进行数据加密改造.包括Mysql.redis.mongodb.es.HBase等. 因为在项目中是使用springboot+mybatis方式连接数据库进行增删改查,并且项目是中途改造数据.所以为了不影响正常业务,打算这次改动尽量不侵入到业务代码,加上mybatis开放的各种拦截器接口,所以就以此进行改造数据. 本篇文章讲述如何在现有项目中尽量不侵入业务方

  • golang使用aes库实现加解密操作

    golang实现加密解密的库很多,这里使用的是aes库+base64库来实现. 使用时,需要指定一个私钥,来进行加解密,这里指定是: var aeskey = []byte("321423u9y8d2fwfl") 上代码: package main import ( "fmt" "crypto/cipher" "crypto/aes" "bytes" "encoding/base64"

  • mybatis 字段名自动转小写的实现

    1.什么是Mybatis? MyBatis是一个优秀的持久层框架,是一个半ORM(对象关系映射)框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如加载驱动.创建连接.创建statement等繁杂的过程. Mybatis通过xml或注解的方式将要执行的statement配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回. 2.Mybatis

  • Spring利用注解整合Mybatis的方法详解

    目录 一.环境准备 步骤1:数据库相关 步骤2:导入jar包 步骤3:创建模型类 步骤4:创建Dao接口和实现类 步骤5:创建Service接口和实现类 步骤6:添加jdbc.properties文件 步骤7:添加Mybatis核心配置文件 步骤8:编写测试程序 二.整合思路分析 三.整合步骤 步骤1:导入整合jar包 步骤2:创建数据源配置类 步骤3:创建Mybatis配置类 步骤4:创建Spring主配置类 步骤5:编写运行程序 一.环境准备 步骤1:数据库相关 建库建表 创建spring_

  • MybatisPlus 不修改全局策略和字段注解如何将字段更新为null

    mybatis-plus 以下简称mp,目前应该也算是主流的一款数据访问层应用框架.源于其对mybatis 的近乎完美的封装,让我们在使用的时候无比的顺滑, 几乎提供了所有单表操作的方法,大大提升了效率.并且这款框架还是国产的哦,没了解过的可以去了解一下. 回归正题,我们这次来讲一下,怎么样通过mp将数据库中的一个字段更新为null. 可能很多人会觉得奇怪,更新为null, 直接set field = null 不就可以了.这里大家要注意一下,一般情况,我们在使用mp的时候,他的默认策略是空不更

  • Spring Cloud @EnableFeignClients注解的属性字段basePacka详解

    @EnableFeignClients注解的属性字段basePacka 一般情况下,我们在启动类上面添加了@EnableFeignClients注解就是表明当前应用服务(我们称之为服务A)中有的地方想要引用其它应用服务(我们称之为服务B)中的接口. 如果服务B可以单独启动起来并且注册到注册中心,则我们仅仅在服务A的启动类中添加@EnableFeignClients注解即可:如果服务B没有单独启动起来,而是以Jar包的形式被引入到服务A中,则服务A在启动的时候是不会主动去加载服务B中标注了@Fei

随机推荐