昨天同事让我帮他解答AOP的代码,复习了一下,感觉有点东西。想想项目中有些地方还是能用到spring AOP的,比如证件号码、手机号、姓名等,在前端显示时需要脱敏,比如176***0776这样。当然每次写代码也能处理,但是感觉有点low,想想AOP配合注解就能实现,于是一番操作,具体实现如下:
1.定义脱敏的注解,需要脱敏的字段只要加上这个注解就能实现脱敏:
@Target({
ElementType.FIELD,ElementType.METHOD}) // 注解可用在字段和方法上
@Retention(RetentionPolicy.RUNTIME)
public @interface PrivacyEncrypt {
PrivacyTypeEnum type() default PrivacyTypeEnum.CUSTOMER; //脱敏数据类型
int prefixNoMaskLen() default 1; // 前缀不需要打吗长度
int suffixNoMaskLen() default 1; // 后缀不需要打吗长度
String symbol() default "*"; // 用什么打码
}
2.定义需要脱敏的数据枚举类:
public enum PrivacyTypeEnum {
/** 自定义(此项需设置脱敏的范围)*/
CUSTOMER,
/** 姓名 */
NAME,
/** 身份证号 */
ID_NO,
/** 手机号 */
PHONE,
/** 邮箱 */
EMAIL,
}
3.数据脱敏的工具类
public class PrivacyUtil {
/**
* 隐藏手机号中间四位
*/
public static String hidePhone(String phone) {
return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})"