MyBatisplus3.5数据脱敏 案列
时间: 2023-10-23 16:17:08 浏览: 99
MyBatisplus3.5支持使用自定义的TypeHandler来实现数据脱敏功能,下面是一个简单的案例:
假设有一个User实体类,其中包含了用户的姓名、手机号码和邮箱地址等敏感信息。现在需要对这些信息进行脱敏处理。
首先,我们可以创建一个自定义的TypeHandler来实现数据脱敏的功能:
```java
public class SensitiveStringTypeHandler extends BaseTypeHandler<String> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, sensitive(parameter));
}
@Override
public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
return sensitive(rs.getString(columnName));
}
@Override
public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return sensitive(rs.getString(columnIndex));
}
@Override
public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return sensitive(cs.getString(columnIndex));
}
/**
* 对敏感信息进行脱敏处理
*/
private String sensitive(String data) {
if (StringUtils.isBlank(data)) {
return "";
}
if (data.length() <= 3) {
return "*";
}
return data.substring(0, 1) + "***" + data.substring(data.length() - 1);
}
}
```
上述代码中,我们创建了一个SensitiveStringTypeHandler类,继承了MyBatis的BaseTypeHandler<String>类,并重写了其中的几个方法。具体来说,我们在setNonNullParameter、getNullableResult等方法中调用sensitive方法对敏感信息进行脱敏处理,然后将处理后的结果返回给MyBatis。
接下来,我们可以在User实体类中指定需要进行脱敏处理的字段:
```java
public class User {
private Long id;
@TableField(value = "name", el = "name, typeHandler=SensitiveStringTypeHandler")
private String name;
@TableField(value = "mobile", el = "mobile, typeHandler=SensitiveStringTypeHandler")
private String mobile;
@TableField(value = "email", el = "email, typeHandler=SensitiveStringTypeHandler")
private String email;
// 省略getter、setter方法
}
```
上述代码中,我们使用@TableField注解指定了需要进行脱敏处理的字段,并通过el属性指定了对应的TypeHandler。
最后,在使用MyBatisplus3.5进行数据库操作时,自定义的TypeHandler会自动生效,从而实现了数据脱敏的功能。
```java
public interface UserMapper extends BaseMapper<User> {
}
```
阅读全文