package com.panzhihua.common.model.helper.encrypt;
|
|
import java.lang.annotation.Annotation;
|
import java.lang.reflect.Field;
|
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Component;
|
|
import com.panzhihua.common.model.helper.AESUtil;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
/***
|
* 默认实现: AES 128 加密、解密 可自定义实现{@link IEncryptDecrypt }接口
|
*
|
* @author cedoo
|
* @since 2021-4-1 10:40:52
|
*/
|
@Slf4j
|
@Component
|
public class DoEncrytDecrypt implements IEncryptDecrypt {
|
|
@Value("${domain.aesKey:}")
|
private String aesKey;
|
|
@Override
|
public <T> T encrypt(Field[] declaredFields, T parameterObject) throws IllegalAccessException {
|
for (Field field : declaredFields) {
|
if (field.getType() == String.class) {
|
field.setAccessible(true);
|
for (Annotation annotation : field.getAnnotations()) {
|
if (annotation.annotationType() == EncryptDecryptField.class
|
|| annotation.annotationType() == EncryptQuery.class) {
|
log.debug("加密字段:" + field.getName());
|
Object fieldVal = field.get(parameterObject);
|
if (fieldVal != null) {
|
try {
|
String encryptedStr = AESUtil.encrypt128(fieldVal.toString(), aesKey);
|
field.set(parameterObject, encryptedStr);
|
} catch (Exception e) {
|
log.debug("加密失败");
|
}
|
}
|
}
|
}
|
}
|
}
|
return parameterObject;
|
}
|
|
@Override
|
public <T> T decrypt(T result) throws IllegalAccessException {
|
|
for (Field field : result.getClass().getDeclaredFields()) {
|
try {
|
field.setAccessible(true);
|
if (field.get(result) != null) {
|
for (Annotation annotation : field.getAnnotations()) {
|
if (annotation.annotationType() == EncryptDecryptField.class) {
|
log.debug("解密密字段:" + field.getName());
|
String fieldVal = field.get(result).toString();
|
try {
|
String decryptVal = AESUtil.decrypt128(fieldVal, aesKey);
|
field.set(result, decryptVal != null ? decryptVal : fieldVal);
|
} catch (Exception e) {
|
/**
|
* 兼容原始未加密数据
|
*/
|
field.set(result, fieldVal);
|
}
|
}
|
}
|
}
|
} catch (IllegalAccessException e) {
|
throw e;
|
}
|
}
|
return result;
|
}
|
|
}
|