一、前言
有时候,我们接口返回的数据需要做一些处理,有一些敏感数据,我们不能全部返回给用户,需要用*号隐藏掉一部分关键数据,使得该敏感数据变得不完全,其他人无法知道脱敏前的数据是什么样的。同时,存储在底层数据库的数据,一些关键信息如用户密码、身份证、手机号等敏感信息,也不能够通过明文的方式存放在数据库中。
数据脱敏有以下几种做法:
1、通过Mybatis处理
2、通过自定义Jackson注解,实现在属性序列化过程中处理数据
3、其他方式
二、Mybatis数据脱敏
在数据库中,根据业务需求存放了不少的有关用户的敏感信息,比如身份证、手机、住址、密码等信息,如果这些数据都是以明文的形式存放的,那么,当数据库被破解后,用户这些重要的信息都会被泄露。
数据加密解密很简单,如果自己手动在插入数据前对数据加密,读取到数据后进行手动解密,那么将会很麻烦。
因此,对于数据库数据的加密解密将采用Mybatis的TypeHandler处理,在我们为数据库提供数据后,会根据我们的需求,对部分数据进行加密。在读取后数据最终到我们手上前,会对读取到数据进行解密。请给位跟随以下的做法,实现Mybatis数据脱敏把。
1、自定义一个TypeHandler类型的处理器,用于处理数据的加密和解密
TypeHandler用于处理数据在数据库类型和java类型之间的转换,默认情况下,我们常用的String、Long、Date等java类型都有对应的TypeHandler进行处理,我们自定义TypeHanler的情况在于目前没有对应的数据转换处理器。
以下为自定义的字符串加密解密处理器:
import cn.hutool.crypto.symmetric.AES;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.springframework.util.StringUtils;
import java.nio.charset.StandardCharsets;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Objects;
/**
* mybatis String类型敏感字段处理类
* 可以通过实现TypeHandler,但是BaseTypeHandler已经实现了,我们可以继承它
*/
public class SensitiveColumnHandler extends BaseTypeHandler<String> {
private static final String key = "wjfgncvkdkd25fc2";
/**
* 设置参数值,在此处对字段值进行加密处理
*/
@Override
public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
// 如果字段或字段值为空,不进行处理
if(StringUtils.isEmpty(parameter)){
ps.setString(i, parameter);
return;
}
// 对字段值进行加密,此处使用hutool工具,有其他使用其他即可
AES aes = SecureUtil.aes(key.getBytes(StandardCharsets.UTF_8));
String secretStr = aes.encryptHex(parameter);
ps.setString(i, secretStr);
}
/**
* 获取值内容
*/
@Override
public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
String value = rs.getString(columnName);
if(Objects.isNull(value)){
return null;
}
// 对字段值进行加密,此处使用hutool工具,有其他使用其他即可
AES aes = SecureUtil.aes(key.getBytes(StandardCharsets.UTF_8));
return aes.decr

文章介绍了如何使用Mybatis的TypeHandler实现数据库数据的加密解密,以及通过自定义Jackson注解实现序列化过程中的敏感信息脱敏。两种方法提供了在存储和传输敏感数据时的安全保护措施。
最低0.47元/天 解锁文章
674





