SpringBoot 实现数据加密脱敏(注解 + 反射 + AOP)
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.util.Objects;
@Component
public class DataMutator {
public Object encrypt(Object data) {
if (data == null) {
return data;
}
// 这里可以替换为你的加密逻辑
return "encrypted_" + data.toString();
}
public Object decrypt(Object data) {
if (data == null) {
return data;
}
// 这里可以替换为你的解密逻辑
if (data instanceof String && ((String) data).startsWith("encrypted_")) {
return ((String) data).substring("encrypted_".length());
}
return data;
}
public Object decryptIfEncrypted(Object data) {
if (data == null) {
return data;
}
// 如果是基本类型或String,直接返回
if (data.getClass().isPrimitive() || data instanceof String) {
return data;
}
// 反射遍历所有字段并解密带有Encrypted注解的字段
try {
Class<?> clazz = data.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(Encrypted.class)) {
field.setAccessible(true);
Object fieldValue = field.get(data);
field.set(data, decrypt(fieldValue));
}
}
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return data;
}
}
这个示例代码提供了一个简单的数据加解密的实现。在实际应用中,你需要根据自己的加解密算法来替换encrypt
和decrypt
方法的实现。decryptIfEncrypted
方法会检查对象的字段是否有Encrypted
注解,如果有,则对这些字段进行解密操作。这个方法可以在数据读取时使用,以保护敏感数据的安全。
评论已关闭