mybatis-plus(mysql+springboot)实现字段的加解密

本文介绍了如何在项目开发中使用MyBatis-Plus的BaseTypeHandler实现对身份证号、手机号等敏感字段的脱敏操作,通过自定义加密算法并集成到数据库加解密Handler中,同时在实体类中设置typeHandler进行处理,以及通过Dubug进行简单测试的过程。

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

项目开发,会对表字段进行进行脱敏操作,如身份证号,手机号等等,通过继承mybatis-plusti提供的BaseTypeHandler类来统一处理这类问题

1.导入依赖(gradle)  加密算法可以使用现成的(如:hutool包提供的AES),也可以自定义,最好是自定义,我这里使用的是自定义的加密算法

2.增加数据库加解密Handler,指定加解密字段

package com.gongqibing.turnright.application.util.encrypthandler;

import com.qibingdaojia.encrypt.util.TurnRightEncryptUtil;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Objects;

@MappedJdbcTypes(JdbcType.VARCHAR)
public class NeedEncryptAttributeHandler extends BaseTypeHandler<String> {


    private static final String RETURN_NULL_SIGN = null;

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {

        if (StringUtils.isEmpty(parameter)) {
            ps.setString(i, RETURN_NULL_SIGN);
            return;
        }
        //加密,使用通用方法
        String encrypt = TurnRightEncryptUtil.encrypt(parameter);
        ps.setString(i, encrypt);
    }

    @Override
    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return decrypt(rs.getString(columnName));
    }

    @Override
    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return decrypt(rs.getString(columnIndex));
    }

    @Override
    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return decrypt(cs.getString(columnIndex));
    }

    public String decrypt(String value) {
        if (Objects.isNull(value)) {
            return RETURN_NULL_SIGN;
        }
        return TurnRightEncryptUtil.decrypt(value);
    }



}

3.在实体类中需要加解密的字段添加上typeHandler,指定使用处理器

4.简单测试(使用dubug,跟着流程看到的效果更好,只要走到NeedEncryptAttributeHandler类,说明以及拦截到)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值