weaver-hrm-salary/src/com/engine/salary/encrypt/EncryptUtil.java

147 lines
6.0 KiB
Java
Raw Normal View History

2022-12-12 09:37:15 +08:00
package com.engine.salary.encrypt;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.annotation.Encrypt;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.sys.service.SalarySysConfService;
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import weaver.hrm.User;
import java.lang.reflect.Field;
2022-12-14 13:51:01 +08:00
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
2022-12-12 09:37:15 +08:00
import java.util.stream.Collectors;
@Slf4j
public class EncryptUtil {
private SalarySysConfService getSalarySysConfService(User user) {
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
}
public <T> T encrypt(T data, Class<T> clazz) {
2022-12-14 13:51:01 +08:00
if (data == null || clazz == null) {
return data;
}
2022-12-12 09:37:15 +08:00
boolean encryptIsOpen = getSalarySysConfService(null).encryptIsOpen();
if (!encryptIsOpen) {
return data;
}
try {
List<Field> fieldList = Arrays.stream(clazz.getDeclaredFields()).filter(field -> field.isAnnotationPresent(Encrypt.class)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(fieldList)) {
for (Field field : fieldList) {
Field declaredField = data.getClass().getDeclaredField(field.getName());
declaredField.setAccessible(true);
String fieldValue = (String) declaredField.get(data);
if (StringUtils.isNotBlank(fieldValue)) {
String encryptValue = AESEncryptUtil.encrypt(fieldValue);
declaredField.set(data, encryptValue);
}
}
}
return data;
} catch (Exception e) {
log.error("加密异常", e);
throw new SalaryRunTimeException("加密异常");
}
}
public <T> List<T> encryptList(List<T> dataList, Class<T> clazz) {
2022-12-14 13:51:01 +08:00
if (CollectionUtils.isEmpty(dataList) || clazz == null) {
return dataList;
}
2022-12-12 09:37:15 +08:00
boolean encryptIsOpen = getSalarySysConfService(null).encryptIsOpen();
if (!encryptIsOpen) {
return dataList;
}
try {
List<Field> fieldList = Arrays.stream(clazz.getDeclaredFields()).filter(field -> field.isAnnotationPresent(Encrypt.class)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(fieldList)) {
List<Map<String, String>> values = new ArrayList<>();
for (T data : dataList) {
for (Field field : fieldList) {
Field declaredField = data.getClass().getDeclaredField(field.getName());
declaredField.setAccessible(true);
String fieldValue = (String) declaredField.get(data);
if (StringUtils.isNotBlank(fieldValue)) {
String encryptValue = AESEncryptUtil.encrypt(fieldValue);
declaredField.set(data, encryptValue);
}
}
}
}
return dataList;
} catch (Exception e) {
log.error("批量加密异常", e);
throw new SalaryRunTimeException("批量加密异常");
}
}
public <T> T decrypt(T data, Class<T> clazz) {
2022-12-14 13:51:01 +08:00
if (data == null || clazz == null) {
return data;
}
2022-12-12 09:37:15 +08:00
boolean encryptIsOpen = getSalarySysConfService(null).encryptIsOpen();
if (!encryptIsOpen) {
return data;
}
try {
List<Field> fieldList = Arrays.stream(clazz.getDeclaredFields()).filter(field -> field.isAnnotationPresent(Encrypt.class)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(fieldList)) {
for (Field field : fieldList) {
Field declaredField = data.getClass().getDeclaredField(field.getName());
declaredField.setAccessible(true);
String fieldValue = (String) declaredField.get(data);
if (StringUtils.isNotBlank(fieldValue)) {
String encryptValue = AESEncryptUtil.decrypt(fieldValue);
declaredField.set(data, encryptValue);
}
}
}
return data;
} catch (Exception e) {
log.error("解密异常", e);
throw new SalaryRunTimeException("解密异常");
}
}
public <T> List<T> decryptList(List<T> dataList, Class<T> clazz) {
2022-12-14 13:51:01 +08:00
if (CollectionUtils.isEmpty(dataList) || clazz == null) {
return dataList;
}
2022-12-12 09:37:15 +08:00
boolean encryptIsOpen = getSalarySysConfService(null).encryptIsOpen();
if (!encryptIsOpen) {
return dataList;
}
try {
List<Field> fieldList = Arrays.stream(clazz.getDeclaredFields()).filter(field -> field.isAnnotationPresent(Encrypt.class)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(fieldList)) {
for (T data : dataList) {
for (Field field : fieldList) {
Field declaredField = data.getClass().getDeclaredField(field.getName());
declaredField.setAccessible(true);
String fieldValue = (String) declaredField.get(data);
if (StringUtils.isNotBlank(fieldValue)) {
String encryptValue = AESEncryptUtil.decrypt(fieldValue);
declaredField.set(data, encryptValue);
}
}
}
}
return dataList;
} catch (Exception e) {
log.error("批量解密异常", e);
throw new SalaryRunTimeException("批量解密异常");
}
}
}