【数据脱敏方案】不使用 AOP + 注解,使用 SpringBoot+YAML 实现
    		       		warning:
    		            这篇文章距离上次修改已过420天,其中的内容可能已经有所变动。
    		        
        		                
                在Spring Boot项目中,你可以使用YAML文件来配置数据脱敏规则,然后通过自定义的数据脱敏器来处理数据脱敏。以下是一个简化的示例:
- 在application.yml中定义数据脱敏规则:
desensitization:
  user:
    name: prefix
    phone: mobile
    email: suffix- 创建自定义数据脱敏处理器:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
 
@Component
public class DesensitizationHandler {
 
    @Value("${desensitization.user.name}")
    private String nameDesensitization;
 
    @Value("${desensitization.user.phone}")
    private String phoneDesensitization;
 
    @Value("${desensitization.user.email}")
    private String emailDesensitization;
 
    public String desensitizeName(String name) {
        return mask(name, nameDesensitization);
    }
 
    public String desensitizePhone(String phone) {
        return mask(phone, phoneDesensitization);
    }
 
    public String desensitizeEmail(String email) {
        return mask(email, emailDesensitization);
    }
 
    private String mask(String value, String maskType) {
        if ("prefix".equals(maskType)) {
            return maskPrefix(value);
        } else if ("mobile".equals(maskType)) {
            return maskMobile(value);
        } else if ("suffix".equals(maskType)) {
            return maskSuffix(value);
        }
        return value;
    }
 
    private String maskPrefix(String value) {
        if (value != null && value.length() > 2) {
            return value.substring(0, 1) + "**";
        }
        return value;
    }
 
    private String maskMobile(String value) {
        if (value != null && value.length() == 11) {
            return value.substring(0, 3) + "****" + value.substring(7);
        }
        return value;
    }
 
    private String maskSuffix(String value) {
        if (value != null && value.length() > 2) {
            return "**" + value.substring(value.length() - 1);
        }
        return value;
    }
}- 在需要脱敏的地方调用处理器:
@Autowired
private DesensitizationHandler desensitizationHandler;
 
public String getUserInfo(User user) {
    user.setName(desensitizationHandler.desensitizeName(user.getName()));
    user.setPhone(desensitizationHandler.desensitizePhone(user.getPhone()));
    user.setEmail(desensitizationHandler.desensitizeEmail(user.getEmail()));
    // 转换为JSON或其他格式输出
    return user.toJson();
}这个简单的例
评论已关闭