最近又遇到了脱敏数据查询相关的问题,常规的脱敏数据比如用户身份证将中间位数抹去后加入数据库,那么查询时需要手动调用就比较麻烦,不过可以使用自定义注解,利用AOP解析后在切面将数据加密再作为参数注入运行,实现非入侵的脱敏数据明文查询。简单记录一下。
情境和思路
用户身份证脱敏,保留前四位和后八位,其余转换为×符号存入数据库。利用aop在方法执行的切面将注解修饰的方法中对应的参数进行加密后注入,就能实现脱敏数据的明文搜索,而不用手动调工具类了。
实现
用户
简单的用户信息,code为身份证。
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String code;
private String name;
private byte sex;
}
Mapper
简单的搜索接口。
@Mapper
public interface UserMapper {
@Select("select * from user where code = #{code}")
public User findUserByCode(String code);
}
加密工具类
将加密类型也作为参数,适应不同情况。
public class EncryptionUtil {
public final static String SELF_CODE = "self_code";
// 加密
public static String encrypt