1.依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.21</version>
</dependency>
2.加密工具类
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.DES;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
public class Encrypted {
private static final String KEY = "1234567890123456";
private static DES des;
static {
des= SecureUtil.des(SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue(),KEY.getBytes()).getEncoded());
}
public static String encode(String value) {
return des.encryptBase64(value);
}
public static String decode(String value) {
return des.decryptStr(value);
}
}
3.反射对象
import lombok.Data;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
@Data
public class BaseModel {
private static List<String> attributes;
private final String set = "set";
{
attributes = new ArrayList<>();
attributes.add("name");
attributes.add("desc");
}
public BaseModel encode() throws Exception {
return updateField(UpdateType.ENCODE);
}
public BaseModel decode() throws Exception {
return updateField(UpdateType.DECODE);
}
public BaseModel hidden() throws Exception {
return updateField(UpdateType.HIDDEN);
}
private BaseModel updateField(UpdateType type) throws Exception {
Class clz = this.getClass();
for (String attribute : attributes) {
Field field = clz.getDeclaredField(attribute);
field.setAccessible(true);
String value = (String) field.get(this);
String methodName = set + attribute.substring(0, 1).toUpperCase() + attribute.substring(1);
Method method = clz.getDeclaredMethod(methodName, field.getType());
switch (type) {
case DECODE:
method.invoke(this, Encrypted.decode(value));
case ENCODE:
method.invoke(this, Encrypted.encode(value));
case HIDDEN:
method.invoke(this, value.substring(0, 1) + "****" + value.substring(3));
default:
break;
}
}
return this;
}
enum UpdateType {
ENCODE,
DECODE,
HIDDEN
}
}