Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
疯狂的狮子li
2021-12-28 11:24:58 +08:00
5 changed files with 201 additions and 0 deletions

View File

@ -0,0 +1,23 @@
package com.ruoyi.common.annotation;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.ruoyi.common.enums.SensitiveStrategy;
import com.ruoyi.common.jackson.SensitiveJsonSerializer;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 数据脱敏注解
* @author zhujie
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@JacksonAnnotationsInside
@JsonSerialize(using = SensitiveJsonSerializer.class)
public @interface Sensitive {
SensitiveStrategy strategy();
}

View File

@ -0,0 +1,32 @@
package com.ruoyi.common.enums;
import cn.hutool.core.util.DesensitizedUtil;
import java.util.function.Function;
/**
* 脱敏策略
* @author Yjoioooo
*/
public enum SensitiveStrategy {
/** 身份证脱敏 */
ID_CARD(s -> DesensitizedUtil.idCardNum(s, 3, 4)),
/** 手机号脱敏 */
PHONE(DesensitizedUtil::mobilePhone),
/** 地址脱敏 */
ADDRESS(s -> DesensitizedUtil.address(s, 8));
//可自行添加其他脱敏策略
private final Function<String, String> desensitizer;
SensitiveStrategy(Function<String, String> desensitizer) {
this.desensitizer = desensitizer;
}
public Function<String, String> desensitizer() {
return desensitizer;
}
}

View File

@ -0,0 +1,43 @@
package com.ruoyi.common.jackson;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import com.ruoyi.common.annotation.Sensitive;
import com.ruoyi.common.enums.SensitiveStrategy;
import com.ruoyi.common.utils.SecurityUtils;
import java.io.IOException;
import java.util.Objects;
/**
* 数据脱敏json序列化工具
* @author Yjoioooo
*/
public class SensitiveJsonSerializer extends JsonSerializer<String> implements ContextualSerializer {
private SensitiveStrategy strategy;
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (SecurityUtils.isAdmin(SecurityUtils.getLoginUser().getUserId()) || SecurityUtils.getLoginUser().getMenuPermissions().contains("Sensitive")){
gen.writeString(value);
} else {
gen.writeString(strategy.desensitizer().apply(value));
}
}
@Override
public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {
Sensitive annotation = property.getAnnotation(Sensitive.class);
if (Objects.nonNull(annotation)&&Objects.equals(String.class, property.getType().getRawClass())) {
this.strategy = annotation.strategy();
return this;
}
return prov.findValueSerializer(property.getType(), property);
}
}