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 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 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; } }