From 7093f1161568b6da66d6f2ae6c789f88ddcd7f28 Mon Sep 17 00:00:00 2001 From: zer0Black Date: Thu, 12 Oct 2023 14:56:31 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90modify=E3=80=91=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E6=9D=83=E9=99=90=E5=B9=B3=E5=8F=B0=E5=81=9Apo=E5=B1=82?= =?UTF-8?q?=E5=B0=81=E8=A3=85=EF=BC=8C=E4=B8=94=E4=B8=8D=E5=8A=A0=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iam/controller/SyncIamController.java | 59 ++++++++++++++----- .../iam/po/decrypt/AcceptDecryptPo.java | 19 ++++++ .../iam/po/decrypt/MessageDecryptTabels.java | 15 +++++ .../iam/po/decrypt/SendPoDecryptPo.java | 27 +++++++++ .../docking/iam/service/SyncIamService.java | 35 +++++++---- 5 files changed, 129 insertions(+), 26 deletions(-) create mode 100644 laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/decrypt/AcceptDecryptPo.java create mode 100644 laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/decrypt/MessageDecryptTabels.java create mode 100644 laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/decrypt/SendPoDecryptPo.java diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/SyncIamController.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/SyncIamController.java index 1b6feb86..d26b58e6 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/SyncIamController.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/SyncIamController.java @@ -11,6 +11,8 @@ import com.jero.modules.docking.iam.dto.IamOrgAcceptDto; import com.jero.modules.docking.iam.dto.IamUserAcceptDto; import com.jero.modules.docking.iam.dto.response.*; import com.jero.modules.docking.iam.exception.IamGlobalException; +import com.jero.modules.docking.iam.po.decrypt.AcceptDecryptPo; +import com.jero.modules.docking.iam.po.decrypt.SendPoDecryptPo; import com.jero.modules.docking.iam.po.encrypt.AcceptEncryptPo; import com.jero.modules.docking.iam.po.MessageHeader; import com.jero.modules.docking.iam.po.encrypt.SendPoEncryptPo; @@ -68,7 +70,7 @@ public class SyncIamController { // 处理统一响应PO层,并加密业务字段 MessageHeader acceptMessageHeader = iamCommon.getMessageHeader(); - SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablResponse(acceptMessageHeader, iamSchemaResponse); + SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(acceptMessageHeader, iamSchemaResponse); return sendPoEncryptPo; } @@ -99,7 +101,7 @@ public class SyncIamController { // 处理统一响应PO层,并加密业务字段 MessageHeader acceptMessageHeader = iamUserInfo.getMessageHeader(); - SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablResponse(acceptMessageHeader, iamUserCreateResponse); + SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(acceptMessageHeader, iamUserCreateResponse); return sendPoEncryptPo; } catch (DuplicateKeyException duplicateKeyException) { log.error("数据库值重复:{}", duplicateKeyException.getMessage()); @@ -135,7 +137,7 @@ public class SyncIamController { // 处理统一响应PO层,并加密业务字段 MessageHeader acceptMessageHeader = iamUserInfo.getMessageHeader(); - SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablResponse(acceptMessageHeader, iamCommonResponseDto); + SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(acceptMessageHeader, iamCommonResponseDto); return sendPoEncryptPo; } @@ -164,7 +166,7 @@ public class SyncIamController { // 处理统一响应PO层,并加密业务字段 MessageHeader acceptMessageHeader = iamUserInfo.getMessageHeader(); - SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablResponse(acceptMessageHeader, iamCommonResponseDto); + SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(acceptMessageHeader, iamCommonResponseDto); return sendPoEncryptPo; } @@ -202,7 +204,7 @@ public class SyncIamController { // 处理统一响应PO层,并加密业务字段 MessageHeader acceptMessageHeader = iamOrgInfo.getMessageHeader(); - SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablResponse(acceptMessageHeader, iamOrgCreateResponse); + SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(acceptMessageHeader, iamOrgCreateResponse); return sendPoEncryptPo; } catch (DuplicateKeyException duplicateKeyException) { log.error("数据库值重复:{}", duplicateKeyException.getMessage()); @@ -245,7 +247,7 @@ public class SyncIamController { // 处理统一响应PO层,并加密业务字段 MessageHeader acceptMessageHeader = iamOrgInfo.getMessageHeader(); - SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablResponse(acceptMessageHeader, iamCommonResponseDto); + SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(acceptMessageHeader, iamCommonResponseDto); return sendPoEncryptPo; } @@ -274,7 +276,7 @@ public class SyncIamController { // 处理统一响应PO层,并加密业务字段 MessageHeader acceptMessageHeader = iamOrgInfo.getMessageHeader(); - SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablResponse(acceptMessageHeader, iamCommonResponseDto); + SendPoEncryptPo sendPoEncryptPo = this.syncIamService.handlerGloablEncryptResponse(acceptMessageHeader, iamCommonResponseDto); return sendPoEncryptPo; } @@ -285,29 +287,53 @@ public class SyncIamController { * 通过type字段来区分 */ @PostMapping({"/bpmcCreate"}) - public BpmcResponseDto bpmcCreate(@RequestBody BpmcAcceptDto bpmcAcceptDto) throws JsonProcessingException { - log.info("统一权限服务平台请求数据:{}", bpmcAcceptDto.toString()); + public SendPoDecryptPo bpmcCreate(@RequestBody AcceptDecryptPo acceptDecryptPo) throws JsonProcessingException { + if (acceptDecryptPo == null + || acceptDecryptPo.getMessageDecryptTabels() == null + || acceptDecryptPo.getMessageDecryptTabels().getHeader() == null){ + throw new IamGlobalException(null, "参数传递错误,未收到参数"); + } + + log.info("统一权限服务平台请求数据:{}", acceptDecryptPo.toString()); + + BpmcAcceptDto bpmcAcceptDto = acceptDecryptPo.getMessageDecryptTabels().getHeader(); + MessageHeader messageHeader = acceptDecryptPo.getMessageHeader(); if (CharSequenceUtil.isEmpty(bpmcAcceptDto.getType())){ - return BpmcResponseDto.error("接口类型(type)未传参,请检查"); + return new SendPoDecryptPo().response( + this.syncIamService.generatorReturnMessageHeader(messageHeader), + BpmcResponseDto.error("接口类型(type)未传参,请检查") + ); } if (CharSequenceUtil.isEmpty(bpmcAcceptDto.getEntity())){ - return BpmcResponseDto.error("数据实体(entity)未传参,请检查"); + return new SendPoDecryptPo().response( + this.syncIamService.generatorReturnMessageHeader(messageHeader), + BpmcResponseDto.error("数据实体(entity)未传参,请检查") + ); } if (CharSequenceUtil.isEmpty(bpmcAcceptDto.getAction())){ - return BpmcResponseDto.error("操作方式(action)未传参,请检查"); + return new SendPoDecryptPo().response( + this.syncIamService.generatorReturnMessageHeader(messageHeader), + BpmcResponseDto.error("操作方式(action)未传参,请检查") + ); } if (CharSequenceUtil.isEmpty(bpmcAcceptDto.getSignature())){ - return BpmcResponseDto.error("签名(signature)未传参,请检查"); + return new SendPoDecryptPo().response( + this.syncIamService.generatorReturnMessageHeader(messageHeader), + BpmcResponseDto.error("签名(signature)未传参,请检查") + ); } // 验证签名 String validateSign = SHA256Util.getSHA256StrJava(bpmcAcceptDto.getEntity() + bpmcAppkey + bpmcAcceptDto.getTimestamp()); if (!bpmcAcceptDto.getSignature().equals(validateSign)){ - return BpmcResponseDto.error("签名校验不通过,请检查"); + return new SendPoDecryptPo().response( + this.syncIamService.generatorReturnMessageHeader(messageHeader), + BpmcResponseDto.error("签名校验不通过,请检查") + ); } BpmcResponseDto bpmcResponseDto = BpmcResponseDto.success(); @@ -358,7 +384,10 @@ public class SyncIamController { } } - return bpmcResponseDto; + return new SendPoDecryptPo().response( + this.syncIamService.generatorReturnMessageHeader(messageHeader), + bpmcResponseDto + ); } } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/decrypt/AcceptDecryptPo.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/decrypt/AcceptDecryptPo.java new file mode 100644 index 00000000..bff3c556 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/decrypt/AcceptDecryptPo.java @@ -0,0 +1,19 @@ +package com.jero.modules.docking.iam.po.decrypt; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.jero.modules.docking.iam.po.MessageHeader; +import lombok.Data; + +/** + * 和PO系统做数据交互的最外层壳,做数据接收用 + */ +@Data +public class AcceptDecryptPo { + + @JsonProperty("MessageHeader") + private MessageHeader messageHeader; + + @JsonProperty("Tables") + private MessageDecryptTabels messageDecryptTabels; + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/decrypt/MessageDecryptTabels.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/decrypt/MessageDecryptTabels.java new file mode 100644 index 00000000..4364a654 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/decrypt/MessageDecryptTabels.java @@ -0,0 +1,15 @@ +package com.jero.modules.docking.iam.po.decrypt; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * PO系统交互必须的实体,包含接口传递的正式数据(仅为套的一层壳) + */ +@Data +public class MessageDecryptTabels { + + @JsonProperty("Header") + private T header; + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/decrypt/SendPoDecryptPo.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/decrypt/SendPoDecryptPo.java new file mode 100644 index 00000000..39f1c969 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/decrypt/SendPoDecryptPo.java @@ -0,0 +1,27 @@ +package com.jero.modules.docking.iam.po.decrypt; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.jero.modules.docking.iam.po.MessageHeader; +import lombok.Data; + +/** + * 和PO系统做数据交互的最外层壳,做数据发送用 + */ +@Data +public class SendPoDecryptPo { + + @JsonProperty("MessageHeader") + private MessageHeader messageHeader; + + @JsonProperty("Returns") + private T returns; + + public SendPoDecryptPo response(MessageHeader messageHeader, T t){ + SendPoDecryptPo sendPoDecryptPo = new SendPoDecryptPo<>(); + sendPoDecryptPo.setMessageHeader(messageHeader); + sendPoDecryptPo.setReturns(t); + + return sendPoDecryptPo; + } + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/service/SyncIamService.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/service/SyncIamService.java index 2d69e4e8..eac33b29 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/service/SyncIamService.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/service/SyncIamService.java @@ -22,12 +22,14 @@ import com.jero.modules.docking.iam.dto.bpmc.UserRoleDto; import com.jero.modules.docking.iam.dto.response.*; import com.jero.modules.docking.iam.exception.IamGlobalException; import com.jero.modules.docking.iam.po.MessageHeader; +import com.jero.modules.docking.iam.po.decrypt.SendPoDecryptPo; import com.jero.modules.docking.iam.po.encrypt.SendPoEncryptPo; import com.jero.modules.docking.iam.po.encrypt.SendEncryptReturnsPo; import com.jero.modules.docking.utils.DockingConstant; import com.jero.modules.system.entity.*; import com.jero.modules.system.service.*; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -531,19 +533,10 @@ public class SyncIamService { * @return * @throws JsonProcessingException */ - public SendPoEncryptPo handlerGloablResponse(MessageHeader acceptMessageHeader, Object object) throws JsonProcessingException { + public SendPoEncryptPo handlerGloablEncryptResponse(MessageHeader acceptMessageHeader, Object object) throws JsonProcessingException { SendPoEncryptPo sendPoEncryptPo = new SendPoEncryptPo(); - MessageHeader sendMessageHeader = new MessageHeader(); - sendMessageHeader.setInterfaceID(acceptMessageHeader.getInterfaceID()); - sendMessageHeader.setUUID(UUIDGenerator.generate()); - sendMessageHeader.setMessageId(UUIDGenerator.generate()); - sendMessageHeader.setSender(DockingConstant.SYSTEM_NAME); // 固定值,即本系统 - sendMessageHeader.setReceiver(DockingConstant.IAM_SYSTEM_NAME); - - Date curDate = new Date(); - sendMessageHeader.setSendDate(DateUtils.formatDate(curDate, "YYYYMMDD")); - sendMessageHeader.setSendTime(DateUtils.formatDate(curDate, "HHmmss")); + MessageHeader sendMessageHeader = generatorReturnMessageHeader(acceptMessageHeader); ObjectMapper objectMapper = new ObjectMapper(); String returnData = objectMapper.writeValueAsString(object); @@ -556,6 +549,26 @@ public class SyncIamService { return sendPoEncryptPo; } + + /** + * @param acceptMessageHeader + * @return + */ + @NotNull + public MessageHeader generatorReturnMessageHeader(MessageHeader acceptMessageHeader) { + MessageHeader sendMessageHeader = new MessageHeader(); + sendMessageHeader.setInterfaceID(acceptMessageHeader.getInterfaceID()); + sendMessageHeader.setUUID(UUIDGenerator.generate()); + sendMessageHeader.setMessageId(UUIDGenerator.generate()); + sendMessageHeader.setSender(DockingConstant.SYSTEM_NAME); // 固定值,即本系统 + sendMessageHeader.setReceiver(DockingConstant.IAM_SYSTEM_NAME); + + Date curDate = new Date(); + sendMessageHeader.setSendDate(DateUtils.formatDate(curDate, "YYYYMMDD")); + sendMessageHeader.setSendTime(DateUtils.formatDate(curDate, "HHmmss")); + return sendMessageHeader; + } + /** * 角色创建 */