MyBatis Hive数据脱敏实现方法

作者:技术拾光

时间:2026-06-28

浏览:362

在MyBatis-Hive框架中,自定义TypeHandler实现数据脱敏:为身份证号、手机号等敏感字段定义处理器,读写数据库时自动调用脱敏方法,仅保留后四位,其余替换为星号,查询时自动完成脱敏处理。

文章目录

MyBatis-Hive 数据脱敏实现方案:自定义 TypeHandler 实战

处理数据脱敏,在 MyBatis-Hive 里怎么搞?核心思路是通过自定义类型处理器(TypeHandler),在数据映射到 Java 对象时自动完成脱敏。下面通过一个完整示例,逐步说明数据脱敏的实现流程。

MyBatis Hive数据脱敏实现方法

第一步:确定需要脱敏的敏感字段

假设有一个用户表 user,表中包含身份证号、手机号等敏感信息,这些字段即为数据脱敏的重点处理对象。明确敏感字段是实施 MyBatis-Hive 脱敏策略的前提。

第二步:在映射文件中配置 resultMap

在 MyBatis 的映射文件里定义 resultMap,为敏感字段绑定自定义的类型处理器(TypeHandler)。这样在数据存取时,处理器会自动介入脱敏逻辑。

<resultMap id="userResultMap" type="com.example.User"><id property="id" column="id"/><result property="name" column="name"/><result property="idNumber" column="id_number" javaType="java.lang.String" typeHandler="com.example.IdNumberTypeHandler"/><result property="phoneNumber" column="phone_number" javaType="java.lang.String" typeHandler="com.example.PhoneNumberTypeHandler"/>resultMap>

第三步:实现自定义类型处理器

编写两个类型处理器:IdNumberTypeHandler 和 PhoneNumberTypeHandler。核心逻辑是在读写数据库时调用脱敏方法,例如只保留后四位,其余字符用星号替代。这是 MyBatis-Hive 数据脱敏的关键环节。

public class IdNumberTypeHandler extends BaseTypeHandler {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {ps.setString(i, maskIdNumber(parameter));}@Overridepublic String getNullableResult(ResultSet rs, String columnName) throws SQLException {return maskIdNumber(rs.getString(columnName));}@Overridepublic String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {return maskIdNumber(rs.getString(columnIndex));}@Overridepublic String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {return maskIdNumber(cs.getString(columnIndex));}private String maskIdNumber(String idNumber) {return "****" + idNumber.substring(idNumber.length() - 4);}}public class PhoneNumberTypeHandler extends BaseTypeHandler {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {ps.setString(i, maskPhoneNumber(parameter));}@Overridepublic String getNullableResult(ResultSet rs, String columnName) throws SQLException {return maskPhoneNumber(rs.getString(columnName));}@Overridepublic String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {return maskPhoneNumber(rs.getString(columnIndex));}@Overridepublic String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {return maskPhoneNumber(cs.getString(columnIndex));}private String maskPhoneNumber(String phoneNumber) {return "****" + phoneNumber.substring(phoneNumber.length() - 4);}}

第四步:将查询语句指向 resultMap

在映射文件中,将查询语句直接指向已定义的 userResultMap,即可让数据脱敏生效。

<select id="getUserById" resultMap="userResultMap">SELECT id, name, id_number, phone_number FROM user WHERE id = #{id}select>

完成上述配置后,从 Hive 查询数据时,自定义的 TypeHandler 会自动对身份证号、手机号等敏感信息执行脱敏处理:仅保留后四位,其余字符替换为星号。整体代码量不大,思路清晰,关键在于准确定位需要保护的字段,并通过 TypeHandler 实现自动化的数据脱敏。这种基于 MyBatis-Hive 的脱敏方案,能够有效提升数据安全性,同时保持业务代码的简洁性。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章