!444 @Sensitive脱敏增加角色和权限校验

* update 优化 脱敏增加角色及权限校验
This commit is contained in:
盘古给你一斧
2023-11-09 09:37:56 +00:00
committed by 疯狂的狮子Li
parent 0f16051024
commit c93b666140
5 changed files with 32 additions and 7 deletions

View File

@ -21,4 +21,8 @@ import java.lang.annotation.Target;
@JsonSerialize(using = SensitiveHandler.class)
public @interface Sensitive {
SensitiveStrategy strategy();
String roleKey() default "";
String perms() default "";
}

View File

@ -13,6 +13,6 @@ public interface SensitiveService {
/**
* 是否脱敏
*/
boolean isSensitive();
boolean isSensitive(String roleKey, String perms);
}

View File

@ -26,12 +26,14 @@ import java.util.Objects;
public class SensitiveHandler extends JsonSerializer<String> implements ContextualSerializer {
private SensitiveStrategy strategy;
private String roleKey;
private String perms;
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
try {
SensitiveService sensitiveService = SpringUtils.getBean(SensitiveService.class);
if (ObjectUtil.isNotNull(sensitiveService) && sensitiveService.isSensitive()) {
if (ObjectUtil.isNotNull(sensitiveService) && sensitiveService.isSensitive(roleKey, perms)) {
gen.writeString(strategy.desensitizer().apply(value));
} else {
gen.writeString(value);
@ -47,6 +49,8 @@ public class SensitiveHandler extends JsonSerializer<String> implements Contextu
Sensitive annotation = property.getAnnotation(Sensitive.class);
if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass())) {
this.strategy = annotation.strategy();
this.roleKey = annotation.roleKey();
this.perms = annotation.perms();
return this;
}
return prov.findValueSerializer(property.getType(), property);