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

165 lines
6.1 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;
2022-12-16 09:46:39 +08:00
import org.jetbrains.annotations.NotNull;
2022-12-12 09:37:15 +08:00
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 {
2022-12-16 09:46:39 +08:00
List<Field> fieldList = getFields(clazz);
2022-12-12 09:37:15 +08:00
if (CollectionUtils.isNotEmpty(fieldList)) {
for (Field field : fieldList) {
2022-12-16 10:11:41 +08:00
field.setAccessible(true);
String fieldValue = String.valueOf(field.get(data));
2022-12-12 09:37:15 +08:00
if (StringUtils.isNotBlank(fieldValue)) {
String encryptValue = AESEncryptUtil.encrypt(fieldValue);
2022-12-16 10:11:41 +08:00
field.set(data, encryptValue);
2022-12-12 09:37:15 +08:00
}
}
}
return data;
} catch (Exception e) {
log.error("加密异常", e);
throw new SalaryRunTimeException("加密异常");
}
}
2022-12-16 09:46:39 +08:00
@NotNull
private static <T> List<Field> getFields(Class<T> clazz) {
List<Class<?>> allClasses = new ArrayList<Class<?>>();
2022-12-16 10:01:00 +08:00
for (Class<?> superClass = clazz;
superClass != null;
superClass = superClass.getSuperclass()) {
if (superClass != Object.class) {
allClasses.add(superClass);
2022-12-16 09:46:39 +08:00
}
}
List<Field> fieldList =
allClasses.stream()
.map(Class::getDeclaredFields)
.flatMap(Arrays::stream)
.filter(field -> field.isAnnotationPresent(Encrypt.class)).collect(Collectors.toList());
return fieldList;
}
2022-12-12 09:37:15 +08:00
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 {
2022-12-16 09:46:39 +08:00
List<Field> fieldList = getFields(clazz);
2022-12-12 09:37:15 +08:00
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 {
2022-12-16 09:46:39 +08:00
List<Field> fieldList = getFields(clazz);
2022-12-12 09:37:15 +08:00
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 {
2022-12-16 09:46:39 +08:00
List<Field> fieldList = getFields(clazz);
2022-12-12 09:37:15 +08:00
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("批量解密异常");
}
}
}