From f67fdb14e6776548fd3cc95e1cdbe35b5b40c814 Mon Sep 17 00:00:00 2001 From: liaoxuwei <5789413@qq.com> Date: Thu, 7 Mar 2024 17:39:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mortals/xhx/common/utils/AESUtil.java | 241 ++++++++++++++++++ .../daemon/task/SyncPortalUserTaskImpl.java | 43 +++- .../module/apply/model/vo/MatterApplyVo.java | 2 + .../apply/web/MatterApplyController.java | 25 ++ 4 files changed, 310 insertions(+), 1 deletion(-) create mode 100644 single-matter/src/main/java/com/mortals/xhx/common/utils/AESUtil.java diff --git a/single-matter/src/main/java/com/mortals/xhx/common/utils/AESUtil.java b/single-matter/src/main/java/com/mortals/xhx/common/utils/AESUtil.java new file mode 100644 index 0000000..27b87cc --- /dev/null +++ b/single-matter/src/main/java/com/mortals/xhx/common/utils/AESUtil.java @@ -0,0 +1,241 @@ +package com.mortals.xhx.common.utils; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.Base64Utils; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * AES鍔犲瘑宸ュ叿绫� + * + */ +public class AESUtil { + /** + * 鏃ュ織鐩稿叧 + */ + private static final Logger LOGGER = LoggerFactory.getLogger(AESUtil.class); + /** + * 缂栫爜 + */ + private static final String ENCODING = "UTF-8"; + /** + * 绠楁硶瀹氫箟 + */ + private static final String AES_ALGORITHM = "AES"; + /** + * 鎸囧畾濉厖鏂瑰紡 + */ + private static final String CIPHER_PADDING = "AES/ECB/PKCS5Padding"; + private static final String CIPHER_CBC_PADDING = "AES/CBC/PKCS5Padding"; + /** + * 鍋忕Щ閲�(CBC涓娇鐢紝澧炲己鍔犲瘑绠楁硶寮哄害) + */ + private static final String IV_SEED = "tdrdadq59tbss5n7"; + + /** + * AES鍔犲瘑 + * @param content 寰呭姞瀵嗗唴瀹� + * @param aesKey 瀵嗙爜 + * @return + */ + public static String encrypt(String content, String aesKey){ + if(StringUtils.isBlank(content)){ + LOGGER.info("AES encrypt: the content is null!"); + return null; + } + //鍒ゆ柇绉橀挜鏄惁涓�16浣� + if(StringUtils.isNotBlank(aesKey) && aesKey.length() == 16){ + try { + //瀵瑰瘑鐮佽繘琛岀紪鐮� + byte[] bytes = aesKey.getBytes(ENCODING); + //璁剧疆鍔犲瘑绠楁硶锛岀敓鎴愮閽� + SecretKeySpec skeySpec = new SecretKeySpec(bytes, AES_ALGORITHM); + // "绠楁硶/妯″紡/琛ョ爜鏂瑰紡" + Cipher cipher = Cipher.getInstance(CIPHER_PADDING); + //閫夋嫨鍔犲瘑 + cipher.init(Cipher.ENCRYPT_MODE, skeySpec); + //鏍规嵁寰呭姞瀵嗗唴瀹圭敓鎴愬瓧鑺傛暟缁� + byte[] encrypted = cipher.doFinal(content.getBytes(ENCODING)); + //杩斿洖base64瀛楃涓� + return Base64Utils.encodeToString(encrypted); + } catch (Exception e) { + LOGGER.info("AES encrypt exception:" + e.getMessage()); + throw new RuntimeException(e); + } + + }else { + LOGGER.info("AES encrypt: the aesKey is null or error!"); + return null; + } + } + + /** + * 瑙e瘑 + * + * @param content 寰呰В瀵嗗唴瀹� + * @param aesKey 瀵嗙爜 + * @return + */ + public static String decrypt(String content, String aesKey){ + if(StringUtils.isBlank(content)){ + LOGGER.info("AES decrypt: the content is null!"); + return null; + } + //鍒ゆ柇绉橀挜鏄惁涓�16浣� + if(StringUtils.isNotBlank(aesKey) && aesKey.length() == 16){ + try { + //瀵瑰瘑鐮佽繘琛岀紪鐮� + byte[] bytes = aesKey.getBytes(ENCODING); + //璁剧疆瑙e瘑绠楁硶锛岀敓鎴愮閽� + SecretKeySpec skeySpec = new SecretKeySpec(bytes, AES_ALGORITHM); + // "绠楁硶/妯″紡/琛ョ爜鏂瑰紡" + Cipher cipher = Cipher.getInstance(CIPHER_PADDING); + //閫夋嫨瑙e瘑 + cipher.init(Cipher.DECRYPT_MODE, skeySpec); + + //鍏堣繘琛孊ase64瑙g爜 + byte[] decodeBase64 = Base64Utils.decodeFromString(content); + + //鏍规嵁寰呰В瀵嗗唴瀹硅繘琛岃В瀵� + byte[] decrypted = cipher.doFinal(decodeBase64); + //灏嗗瓧鑺傛暟缁勮浆鎴愬瓧绗︿覆 + return new String(decrypted, ENCODING); + } catch (Exception e) { + LOGGER.info("AES decrypt exception:" + e.getMessage()); + throw new RuntimeException(e); + } + + }else { + LOGGER.info("AES decrypt: the aesKey is null or error!"); + return null; + } + } + + /** + * AES_CBC鍔犲瘑 + * + * @param content 寰呭姞瀵嗗唴瀹� + * @param aesKey 瀵嗙爜 + * @return + */ + public static String encryptCBC(String content, String aesKey){ + if(StringUtils.isBlank(content)){ + LOGGER.info("AES_CBC encrypt: the content is null!"); + return null; + } + //鍒ゆ柇绉橀挜鏄惁涓�16浣� + if(StringUtils.isNotBlank(aesKey) && aesKey.length() == 16){ + try { + //瀵瑰瘑鐮佽繘琛岀紪鐮� + byte[] bytes = aesKey.getBytes(ENCODING); + //璁剧疆鍔犲瘑绠楁硶锛岀敓鎴愮閽� + SecretKeySpec skeySpec = new SecretKeySpec(bytes, AES_ALGORITHM); + // "绠楁硶/妯″紡/琛ョ爜鏂瑰紡" + Cipher cipher = Cipher.getInstance(CIPHER_CBC_PADDING); + //鍋忕Щ + IvParameterSpec iv = new IvParameterSpec(IV_SEED.getBytes(ENCODING)); + //閫夋嫨鍔犲瘑 + cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); + //鏍规嵁寰呭姞瀵嗗唴瀹圭敓鎴愬瓧鑺傛暟缁� + byte[] encrypted = cipher.doFinal(content.getBytes(ENCODING)); + //杩斿洖base64瀛楃涓� + return Base64Utils.encodeToString(encrypted); + } catch (Exception e) { + LOGGER.info("AES_CBC encrypt exception:" + e.getMessage()); + throw new RuntimeException(e); + } + + }else { + LOGGER.info("AES_CBC encrypt: the aesKey is null or error!"); + return null; + } + } + + /** + * AES_CBC瑙e瘑 + * + * @param content 寰呰В瀵嗗唴瀹� + * @param aesKey 瀵嗙爜 + * @return + */ + public static String decryptCBC(String content, String aesKey){ + if(StringUtils.isBlank(content)){ + LOGGER.info("AES_CBC decrypt: the content is null!"); + return null; + } + //鍒ゆ柇绉橀挜鏄惁涓�16浣� + if(StringUtils.isNotBlank(aesKey) && aesKey.length() == 16){ + try { + //瀵瑰瘑鐮佽繘琛岀紪鐮� + byte[] bytes = aesKey.getBytes(ENCODING); + //璁剧疆瑙e瘑绠楁硶锛岀敓鎴愮閽� + SecretKeySpec skeySpec = new SecretKeySpec(bytes, AES_ALGORITHM); + //鍋忕Щ + IvParameterSpec iv = new IvParameterSpec(IV_SEED.getBytes(ENCODING)); + // "绠楁硶/妯″紡/琛ョ爜鏂瑰紡" + Cipher cipher = Cipher.getInstance(CIPHER_CBC_PADDING); + //閫夋嫨瑙e瘑 + cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); + + //鍏堣繘琛孊ase64瑙g爜 + byte[] decodeBase64 = Base64Utils.decodeFromString(content); + + //鏍规嵁寰呰В瀵嗗唴瀹硅繘琛岃В瀵� + byte[] decrypted = cipher.doFinal(decodeBase64); + //灏嗗瓧鑺傛暟缁勮浆鎴愬瓧绗︿覆 + return new String(decrypted, ENCODING); + } catch (Exception e) { + LOGGER.info("AES_CBC decrypt exception:" + e.getMessage()); + throw new RuntimeException(e); + } + + }else { + LOGGER.info("AES_CBC decrypt: the aesKey is null or error!"); + return null; + } + } + + public static void main(String[] args) { + // AES鏀寔涓夌闀垮害鐨勫瘑閽ワ細128浣嶃€�192浣嶃€�256浣嶃€� + // 浠g爜涓繖绉嶅氨鏄�128浣嶇殑鍔犲瘑瀵嗛挜锛�16瀛楄妭 * 8浣�/瀛楄妭 = 128浣嶃€� + String random = "0000000671595991"; +// System.out.println("闅忔満key:" + random); +// System.out.println(); +// +// System.out.println("---------鍔犲瘑---------"); +// String aesResult = encrypt("511181198903042414", random); +// System.out.println("aes鍔犲瘑缁撴灉:" + aesResult); +// System.out.println(); +// +// System.out.println("---------瑙e瘑---------"); +// String decrypt = decrypt(aesResult, random); +// System.out.println("aes瑙e瘑缁撴灉:" + decrypt); +// System.out.println(); +// +// +// System.out.println("--------AES_CBC鍔犲瘑瑙e瘑---------"); +// String cbcResult = encryptCBC("511181198903042414", random); +// System.out.println("aes_cbc鍔犲瘑缁撴灉:" + cbcResult); +// System.out.println(); + + System.out.println("---------瑙e瘑CBC---------"); + String cbcDecrypt = decryptCBC("SWYgzz2KjYx+6TopctMpJQ==", random); + System.out.println("aes瑙e瘑缁撴灉:" + cbcDecrypt); + System.out.println(); + + System.out.println("---------瑙e瘑CBC---------"); + String cbcDecrypt1 = decryptCBC("DXgGKRNryrPM/eeUQiN4wlfpYNUZ0XIwumXNHRFQGZM=", random); + System.out.println("aes瑙e瘑缁撴灉:" + cbcDecrypt1); + System.out.println(); + + System.out.println("---------瑙e瘑CBC---------"); + String cbcDecrypt2 = decryptCBC("6yPbSSjvMeFuJ2ONqNmSyA==", random); + System.out.println("aes瑙e瘑缁撴灉:" + cbcDecrypt2); + System.out.println(); + } +} + diff --git a/single-matter/src/main/java/com/mortals/xhx/daemon/task/SyncPortalUserTaskImpl.java b/single-matter/src/main/java/com/mortals/xhx/daemon/task/SyncPortalUserTaskImpl.java index b3df8e9..fb864d6 100644 --- a/single-matter/src/main/java/com/mortals/xhx/daemon/task/SyncPortalUserTaskImpl.java +++ b/single-matter/src/main/java/com/mortals/xhx/daemon/task/SyncPortalUserTaskImpl.java @@ -4,6 +4,7 @@ import com.mortals.framework.common.Rest; import com.mortals.framework.exception.AppException; import com.mortals.framework.service.ITask; import com.mortals.framework.service.ITaskExcuteService; +import com.mortals.framework.util.StringUtils; import com.mortals.xhx.base.system.user.model.UserEntity; import com.mortals.xhx.base.system.user.model.UserQuery; import com.mortals.xhx.base.system.user.service.UserService; @@ -11,6 +12,9 @@ import com.mortals.xhx.common.code.YesNoEnum; import com.mortals.xhx.common.pdu.RespData; import com.mortals.xhx.common.pdu.user.UserPdu; import com.mortals.xhx.feign.user.IUserFeign; +import com.mortals.xhx.module.apply.model.ApproverEntity; +import com.mortals.xhx.module.apply.model.ApproverQuery; +import com.mortals.xhx.module.apply.service.ApproverService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -34,6 +38,8 @@ public class SyncPortalUserTaskImpl implements ITaskExcuteService { @Autowired private UserService userService; + @Autowired + private ApproverService approverService; @Override @@ -70,7 +76,6 @@ public class SyncPortalUserTaskImpl implements ITaskExcuteService { //闂ㄦ埛鐢ㄦ埛map // Map<String, UserEntity> newUserMap = newUserList.stream().collect(Collectors.toMap(x -> x.getLoginName(), y -> y, (o, n) -> n)); - List<UserEntity> saveUserList = newUserList.stream().map(item -> { if (!oldUserMap.containsKey(item.getLoginName())) { item.setCreateUserId(1L); @@ -89,6 +94,42 @@ public class SyncPortalUserTaskImpl implements ITaskExcuteService { }); } + List<ApproverEntity> newApproverList = userPduList.stream().map(newUser -> { + ApproverEntity approverEntity = new ApproverEntity(); + approverEntity.initAttrValue(); + approverEntity.setFullName(newUser.getRealName()); + if(StringUtils.isNotEmpty(newUser.getPhone())) { + approverEntity.setPhoneNumber(newUser.getMobile()); + }else { + approverEntity.setPhoneNumber("13888888888"); + } + approverEntity.setLoginName(newUser.getLoginName()); + approverEntity.setLoginPwd(newUser.getLoginPwd()); + return approverEntity; + }).collect(Collectors.toList()); + List<ApproverEntity> oldApproverList = approverService.find(new ApproverQuery()); + log.info(" oldApproverList size锛歿}", oldApproverList.size()); + //褰撳墠鍗曚簨椤瑰鎵逛汉鍛� + Map<String, ApproverEntity> oldApproverMap = oldApproverList.parallelStream().collect(Collectors.toMap(x -> x.getLoginName(), y -> y, (o, n) -> n)); + List<ApproverEntity> saveApproverList = newApproverList.stream().map(item -> { + if (!oldApproverMap.containsKey(item.getLoginName())) { + item.setCreateUserId(1L); + item.setCreateUserName("绯荤粺绠$悊鍛�"); + item.setCreateTime(new Date()); + return item; + } + return null; + }).filter(f -> f != null).collect(Collectors.toList()); + + + if (!ObjectUtils.isEmpty(saveApproverList)) { + log.info("鍗曚簨椤瑰鎵逛汉鍛樻柊澧烇紝size:{}", saveApproverList.size()); + saveApproverList.stream().forEach(item -> { + approverService.getDao().insert(item); + }); + } + + } //鏌ユ壘鏂板 涓庢洿鏂� diff --git a/single-matter/src/main/java/com/mortals/xhx/module/apply/model/vo/MatterApplyVo.java b/single-matter/src/main/java/com/mortals/xhx/module/apply/model/vo/MatterApplyVo.java index 1e11dc6..28b29fa 100644 --- a/single-matter/src/main/java/com/mortals/xhx/module/apply/model/vo/MatterApplyVo.java +++ b/single-matter/src/main/java/com/mortals/xhx/module/apply/model/vo/MatterApplyVo.java @@ -31,4 +31,6 @@ public class MatterApplyVo extends BaseEntityLong { private String applyTypeName; private List<MatterApplyDatumGroupVO> datumGroupList; + /** 鏁版嵁鏉ユ簮 1锛氬皬绋嬪簭锛�0鍏朵粬*/ + private Integer source; } \ No newline at end of file diff --git a/single-matter/src/main/java/com/mortals/xhx/module/apply/web/MatterApplyController.java b/single-matter/src/main/java/com/mortals/xhx/module/apply/web/MatterApplyController.java index 9e0d45c..ce30417 100644 --- a/single-matter/src/main/java/com/mortals/xhx/module/apply/web/MatterApplyController.java +++ b/single-matter/src/main/java/com/mortals/xhx/module/apply/web/MatterApplyController.java @@ -11,6 +11,7 @@ import com.mortals.framework.utils.BeanUtil; import com.mortals.framework.utils.ReflectUtils; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.xhx.base.system.param.service.ParamService; +import com.mortals.xhx.common.utils.AESUtil; import com.mortals.xhx.module.apply.model.MatterApplyDatumEntity; import com.mortals.xhx.module.apply.model.MatterApplyDatumQuery; import com.mortals.xhx.module.apply.service.MatterApplyDatumService; @@ -85,6 +86,12 @@ public class MatterApplyController extends BaseCRUDJsonBodyMappingController<Mat int code; try { this.saveBefore(entity, model, context); + if(entity.getSource()!=null && entity.getSource()==1) { + String random = "0000000671595991"; + entity.setApplyPerson(AESUtil.decryptCBC(entity.getApplyPerson(), random)); + entity.setIdCard(AESUtil.decryptCBC(entity.getIdCard(), random)); + entity.setPhoneNum(AESUtil.decryptCBC(entity.getPhoneNum(), random)); + } if (entity.newEntity()) { Class<MatterApplyEntity> tClass = ReflectUtils.getClassGenricType(this.getClass(), 1); MatterApplyEntity initEntity = (MatterApplyEntity)tClass.newInstance(); @@ -193,6 +200,12 @@ public class MatterApplyController extends BaseCRUDJsonBodyMappingController<Mat int code; try { + if(entity.getSource()!=null && entity.getSource()==1) { + String random = "0000000671595991"; + entity.setApplyPerson(AESUtil.decryptCBC(entity.getApplyPerson(), random)); + entity.setIdCard(AESUtil.decryptCBC(entity.getIdCard(), random)); + entity.setPhoneNum(AESUtil.decryptCBC(entity.getPhoneNum(), random)); + } this.service.reApply(entity,context); model.put("id", entity.getId()); code = this.saveAfter(entity, model, context); @@ -257,6 +270,18 @@ public class MatterApplyController extends BaseCRUDJsonBodyMappingController<Mat int code; try { this.doListBefore(query, model, context); + if(query.getSource()!=null && query.getSource()==1) { + String random = "0000000671595991"; + if(StringUtils.isNotEmpty(query.getApplyPerson())) { + query.setApplyPerson(AESUtil.decryptCBC(query.getApplyPerson(), random)); + } + if(StringUtils.isNotEmpty(query.getIdCard())) { + query.setIdCard(AESUtil.decryptCBC(query.getIdCard(), random)); + } + if(StringUtils.isNotEmpty(query.getPhoneNum())) { + query.setPhoneNum(AESUtil.decryptCBC(query.getPhoneNum(), random)); + } + } PageInfo pageInfo = this.buildPageInfo(query); Result<MatterApplyEntity> result = this.getService().find(query, pageInfo, context); this.doListAfter(query, result.getList(), context); -- 2.24.3