数据实现自动加密和解密功能

记录一个功能的实现

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 进行插入和查询操作时,就会自动进行加密和解密操作了