DESKTOP-71BH0QO\L、ming
2021-04-02 a218ccaadff80203bcf82f251f0d448449858ac5
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/helper/encrypt/DoEncrytDecrypt.java
New file
@@ -0,0 +1,79 @@
package com.panzhihua.common.model.helper.encrypt;
import com.panzhihua.common.model.helper.AESUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
/***
 * 默认实现: 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;
    }
}