【modify】统一权限平台做po层封装,且不加密

This commit is contained in:
zer0Black
2023-10-12 14:56:31 +08:00
parent 07c3bedac0
commit 7093f11615
5 changed files with 129 additions and 26 deletions
@@ -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<BpmcResponseDto> bpmcCreate(@RequestBody AcceptDecryptPo<BpmcAcceptDto> 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<BpmcResponseDto>().response(
this.syncIamService.generatorReturnMessageHeader(messageHeader),
BpmcResponseDto.error("接口类型(type)未传参,请检查")
);
}
if (CharSequenceUtil.isEmpty(bpmcAcceptDto.getEntity())){
return BpmcResponseDto.error("数据实体(entity)未传参,请检查");
return new SendPoDecryptPo<BpmcResponseDto>().response(
this.syncIamService.generatorReturnMessageHeader(messageHeader),
BpmcResponseDto.error("数据实体(entity)未传参,请检查")
);
}
if (CharSequenceUtil.isEmpty(bpmcAcceptDto.getAction())){
return BpmcResponseDto.error("操作方式(action)未传参,请检查");
return new SendPoDecryptPo<BpmcResponseDto>().response(
this.syncIamService.generatorReturnMessageHeader(messageHeader),
BpmcResponseDto.error("操作方式(action)未传参,请检查")
);
}
if (CharSequenceUtil.isEmpty(bpmcAcceptDto.getSignature())){
return BpmcResponseDto.error("签名(signature)未传参,请检查");
return new SendPoDecryptPo<BpmcResponseDto>().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<BpmcResponseDto>().response(
this.syncIamService.generatorReturnMessageHeader(messageHeader),
BpmcResponseDto.error("签名校验不通过,请检查")
);
}
BpmcResponseDto bpmcResponseDto = BpmcResponseDto.success();
@@ -358,7 +384,10 @@ public class SyncIamController {
}
}
return bpmcResponseDto;
return new SendPoDecryptPo<BpmcResponseDto>().response(
this.syncIamService.generatorReturnMessageHeader(messageHeader),
bpmcResponseDto
);
}
}
@@ -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<T> {
@JsonProperty("MessageHeader")
private MessageHeader messageHeader;
@JsonProperty("Tables")
private MessageDecryptTabels<T> messageDecryptTabels;
}
@@ -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<T> {
@JsonProperty("Header")
private T header;
}
@@ -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<T> {
@JsonProperty("MessageHeader")
private MessageHeader messageHeader;
@JsonProperty("Returns")
private T returns;
public SendPoDecryptPo<T> response(MessageHeader messageHeader, T t){
SendPoDecryptPo<T> sendPoDecryptPo = new SendPoDecryptPo<>();
sendPoDecryptPo.setMessageHeader(messageHeader);
sendPoDecryptPo.setReturns(t);
return sendPoDecryptPo;
}
}
@@ -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;
}
/**
* 角色创建
*/