Mybatis自动加解密

本文介绍了如何在Mybatis项目中使用自定义注解和拦截器,实现在数据库存储和返回前端时对敏感信息的自动加解密,包括Hutool工具的引入、加密/解密方法、以及针对对象List和重复加密问题的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

涉及隐私信息的字段需要加密存储数据库,返回给前端时又需要解密显示正确信息。故采用mybatis自动加解密的方案,该方案基于自定义注解+拦截器进行实现。加密后的信息不支持模糊匹配(可参考业界流行方案,基于业务需求做分词或采用其他方案以支持模糊匹配,本文不涉及)。

网上的部分解决方案会有以下问题(已在代码中完善解决,不再细述):

1.对于对象List中的需加密属性没有加密

2.重复加密,导致密文有误

1.引入hutool-all依赖(加解密所使用依赖)

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.10</version>
</dependency>

2.定义加解密工具类

//加解密工具类
public class EncryptDecryptUtil {

    private final static Logger logger = LoggerFactory.getLogger(EncryptDecryptUtil.class);

    //加解密前缀
    public final static String encrypt_prefix="sensitive_";

    /**
     * 对称加密的秘钥
     */
    private final static String key = "加密密钥";
    /**
     * * 加密     *
     * * @param declaredFields paramsObject所声明的字段
     * * @param paramsObject   mapper中paramsType的实例
     * * @return T
     * * @throws IllegalAccessException 字段不可访问异常
     */
    public static <T> T encrypt(Field[] declaredFields, T paramsObject) throws IllegalAccessException {
        for (Field field : declaredFields) {            //取出所有被EncryptDecryptField注解的字段
            EncryptDecryptField sensitiveField = field.getAnnotation(EncryptDecryptField.class);
            if (!Objects.isNull(sensitiveField)) {
                field.setAccessible(true);
                Object object = field.get(paramsObject);                //暂时只实现String类型的加密
                if (object instanceof String) {
                    String value = (String) object;                    //加密  Des加密工具
                    if(!value.startsWith(encrypt_prefix)) {
                        String encryptHexStr = SecureUtil.des(key.getBytes()).encryptHex(value);
                        encryptHexStr=encrypt_prefix+encryptHexStr;
                        //logger
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值