parent
7a535d9dd2
commit
297daaec2f
@ -0,0 +1,19 @@
|
|||||||
|
package com.xjs.annotation;
|
||||||
|
|
||||||
|
import com.xjs.enums.SensitiveTypeEnum;
|
||||||
|
|
||||||
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据脱敏注解
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-06-21
|
||||||
|
*/
|
||||||
|
@Target({ElementType.FIELD, ElementType.METHOD})
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Inherited
|
||||||
|
@Documented
|
||||||
|
public @interface Desensitized {
|
||||||
|
// 脱敏类型(规则)
|
||||||
|
SensitiveTypeEnum value();
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package com.xjs.config.filter;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.serializer.ValueFilter;
|
||||||
|
import com.xjs.annotation.Desensitized;
|
||||||
|
import com.xjs.enums.SensitiveTypeEnum;
|
||||||
|
import com.xjs.utils.DesensitizedUtils;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据脱敏过滤器
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-06-21
|
||||||
|
*/
|
||||||
|
@Log4j2
|
||||||
|
public class DesensitizedValueFilter implements ValueFilter {
|
||||||
|
@Override
|
||||||
|
public Object process(Object object, String name, Object value) {
|
||||||
|
if (null == value || !(value instanceof String) || ((String) value).length() == 0) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Field field = object.getClass().getDeclaredField(name);
|
||||||
|
Desensitized desensitization;
|
||||||
|
if (String.class != field.getType() || (desensitization = field.getAnnotation(Desensitized.class)) == null) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
String valueStr = (String) value;
|
||||||
|
SensitiveTypeEnum type = desensitization.value();
|
||||||
|
switch (type) {
|
||||||
|
case CHINESE_NAME:
|
||||||
|
return DesensitizedUtils.chineseName(valueStr);
|
||||||
|
case ID_CARD:
|
||||||
|
return DesensitizedUtils.idCardNum(valueStr, 3, 3);
|
||||||
|
case FIXED_PHONE:
|
||||||
|
return DesensitizedUtils.fixedPhone(valueStr);
|
||||||
|
case MOBILE_PHONE:
|
||||||
|
return DesensitizedUtils.mobilePhone(valueStr);
|
||||||
|
case ADDRESS:
|
||||||
|
return DesensitizedUtils.address(valueStr, 8);
|
||||||
|
case EMAIL:
|
||||||
|
return DesensitizedUtils.email(valueStr);
|
||||||
|
case BANK_CARD:
|
||||||
|
return DesensitizedUtils.bankCard(valueStr);
|
||||||
|
case PASSWORD:
|
||||||
|
return DesensitizedUtils.password(valueStr);
|
||||||
|
case CARNUMBER:
|
||||||
|
return DesensitizedUtils.carNumber(valueStr);
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
} catch (NoSuchFieldException e) {
|
||||||
|
log.error("当前数据类型为{},值为{}", object.getClass(), value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.xjs.config.filter;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.serializer.PropertyFilter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 忽略某些空值
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-06-21
|
||||||
|
*/
|
||||||
|
public class IgnoreNullValueFilter implements PropertyFilter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Object object, String name, Object value) {
|
||||||
|
if (value instanceof List && ((List) value).size() == 0) {
|
||||||
|
if ("children".equals(name)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.xjs.config.filter;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.serializer.ValueFilter;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解决mp雪花算法前端精度丢失
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-06-21
|
||||||
|
*/
|
||||||
|
public class SnowflakeValueFilter implements ValueFilter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object process(Object object, String name, Object value) {
|
||||||
|
if ((StringUtils.endsWith(name, "Id") || StringUtils.equals(name, "id")) && value != null && value.getClass() == Long.class) {
|
||||||
|
return String.valueOf(value);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
package com.xjs.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 脱敏的实体类字段 枚举类
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-06-21
|
||||||
|
*/
|
||||||
|
public enum SensitiveTypeEnum {
|
||||||
|
/**
|
||||||
|
* 中文名
|
||||||
|
*/
|
||||||
|
CHINESE_NAME,
|
||||||
|
/**
|
||||||
|
* 身份证号
|
||||||
|
*/
|
||||||
|
ID_CARD,
|
||||||
|
/**
|
||||||
|
* 座机号
|
||||||
|
*/
|
||||||
|
FIXED_PHONE,
|
||||||
|
/**
|
||||||
|
* 手机号
|
||||||
|
*/
|
||||||
|
MOBILE_PHONE,
|
||||||
|
/**
|
||||||
|
* 地址
|
||||||
|
*/
|
||||||
|
ADDRESS,
|
||||||
|
/**
|
||||||
|
* 电子邮件
|
||||||
|
*/
|
||||||
|
EMAIL,
|
||||||
|
/**
|
||||||
|
* 银行卡
|
||||||
|
*/
|
||||||
|
BANK_CARD,
|
||||||
|
/**
|
||||||
|
* 密码
|
||||||
|
*/
|
||||||
|
PASSWORD,
|
||||||
|
/**
|
||||||
|
* 车牌号
|
||||||
|
*/
|
||||||
|
CARNUMBER;
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in new issue