数据实现自动加密和解密功能
记录一个功能的实现
Springboot+MyBatis Plus
1.首先我们需要创建一个自定义的类型处理器,用于将数据库中的加密数据解密成明文数据,并将明文数据加密后插入到数据库中 (EncryptUtils是加密工具类,可以根据要加密的方式自行编写)
@MappedTypes(String.class)
public class EncryptTypeHandler extends BaseTypeHandler<String> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
// 加密参数并设置到PreparedStatement对象中
ps.setString(i, EncryptUtils.encrypt(parameter));
}
@Override
public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
// 从ResultSet对象中获取加密的参数并解密
return EncryptUtils.decrypt(rs.getString(columnName));
}
@Override
public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
// 从ResultSet对象中获取加密的参数并解密
return EncryptUtils.decrypt(rs.getString(columnIndex));
}
@Override
public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
// 从CallableStatement对象中获取加密的参数并解密
return EncryptUtils.decrypt(cs.getString(columnIndex));
}
}
2.在实体类中使用自定义类型处理器
@TableName(value = "user", autoResultMap = true)
public class User {
private Long id;
@TableField(typeHandler = EncryptTypeHandler.class)
private String name; // 加密的名字字段
@TableField(typeHandler = EncryptTypeHandler.class)
private String phone; // 加密的手机号字段
@TableField(typeHandler = EncryptTypeHandler.class)
private String idCard; // 加密的身份证号字段
}
在xml中可以这样配置
<result column="user_name" property="userName" typeHandler="org.springblade.common.interceptor.DecryptTypeHandler" javaType="java.lang.String" jdbcType="VARCHAR"/>
现在,当我们使用 MyBatis Plus 进行插入和查询操作时,就会自动进行加密和解密操作了
大佬,膜拜
学到了,谢谢
学习了
学习
看不懂,鱼派除我佬
看不懂,鱼派除我佬
众所周知,密码是为了防御自己
我一直不喜欢库里存密文,查个东西跟走迷宫一样。
当然。这个迷宫不是跳佬的迷宫
学习了
这种操作 会影响接口响应时间么?
学习了 只用过JPA 使用@Convert注解实现
不明觉历
你加解密数据多少有点影响