From 2a4c8bfc279f10917e93e71a3575f13af99e351d Mon Sep 17 00:00:00 2001 From: zer0Black <694429613@qq.com> Date: Mon, 2 Oct 2023 16:34:13 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=B7=BB=E5=8A=A0=E3=80=91=E7=AB=B9?= =?UTF-8?q?=E4=BA=91=E7=BB=9F=E4=B8=80=E6=9D=83=E9=99=90=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=EF=BC=8C=E6=8E=A5=E5=8F=A3=E5=B1=82=E5=A4=96?= =?UTF-8?q?=E5=A3=B3=E5=92=8C=E7=9B=B8=E5=85=B3=E6=A0=A1=E9=AA=8C=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iam/controller/SyncIamController.java | 60 +++++++++++++++++-- .../docking/iam/dto/BpmcAcceptDto.java | 48 +++++++++++++++ .../iam/dto/response/BpmcResponseDto.java | 27 +++++++++ .../docking/utils/DockingConstant.java | 20 +++++++ .../src/main/resources/application-dev.yml | 3 +- 5 files changed, 153 insertions(+), 5 deletions(-) create mode 100644 laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/BpmcAcceptDto.java create mode 100644 laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/response/BpmcResponseDto.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 fb71b46c..4b186d69 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 @@ -1,14 +1,13 @@ package com.jero.modules.docking.iam.controller; +import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.jero.modules.docking.iam.dto.BpmcAcceptDto; import com.jero.modules.docking.iam.dto.IamCommonAcceptDto; import com.jero.modules.docking.iam.dto.IamOrgAcceptDto; import com.jero.modules.docking.iam.dto.IamUserAcceptDto; -import com.jero.modules.docking.iam.dto.response.IamCommonResponseDto; -import com.jero.modules.docking.iam.dto.response.IamOrgCreateResponse; -import com.jero.modules.docking.iam.dto.response.IamSchemaResponse; -import com.jero.modules.docking.iam.dto.response.IamUserCreateResponse; +import com.jero.modules.docking.iam.dto.response.*; import com.jero.modules.docking.iam.exception.IamGlobalException; import com.jero.modules.docking.iam.po.AcceptPoSystemPo; import com.jero.modules.docking.iam.po.MessageHeader; @@ -16,7 +15,9 @@ import com.jero.modules.docking.iam.po.SendPoSystemPo; import com.jero.modules.docking.iam.service.SyncIamService; import com.jero.modules.docking.utils.BamboocloudUtils; import com.jero.modules.docking.utils.DockingConstant; +import com.jero.modules.docking.utils.SHA256Util; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -32,6 +33,9 @@ import javax.annotation.Resource; @Slf4j public class SyncIamController { + @Value("${iam.bpmcAppkey}") + private String bpmcAppkey; + @Resource private SyncIamService syncIamService; @@ -238,5 +242,53 @@ public class SyncIamController { return sendPoSystemPo; } + /** + * 对接统一权限服务平台。 + * 该接口包含角色创建、菜单创建、角色菜单关联、用户角色关联等4个接口 + * 通过type字段来区分 + */ + @PostMapping({"/OrgDeleteService"}) + public BpmcResponseDto bpmcCreate(@RequestBody BpmcAcceptDto bpmcAcceptDto){ + if (StrUtil.isEmpty(bpmcAcceptDto.getType())){ + return BpmcResponseDto.error("接口类型(type)未传参,请检查"); + } + + if (StrUtil.isEmpty(bpmcAcceptDto.getEntity())){ + return BpmcResponseDto.error("数据实体(entity)未传参,请检查"); + } + + if (StrUtil.isEmpty(bpmcAcceptDto.getAction())){ + return BpmcResponseDto.error("操作方式(action)未传参,请检查"); + } + + if (StrUtil.isEmpty(bpmcAcceptDto.getSignature())){ + return BpmcResponseDto.error("签名(signature)未传参,请检查"); + } + + // 验证签名 + String validateSign = SHA256Util.getSHA256StrJava(bpmcAcceptDto.getEntity() + bpmcAppkey + bpmcAcceptDto.getTimestamp()); + if (!bpmcAcceptDto.getSignature().equals(validateSign)){ + return BpmcResponseDto.error("签名校验不通过,请检查"); + } + + // 分接口类型分别处理 + if (bpmcAcceptDto.getType().equals(DockingConstant.BPMC_TYPE_ROLE)){ + + } + + if (bpmcAcceptDto.getType().equals(DockingConstant.BPMC_TYPE_RESOURCE)){ + + } + + if (bpmcAcceptDto.getType().equals(DockingConstant.BPMC_TYPE_USER_ROLE)){ + + } + + if (bpmcAcceptDto.getType().equals(DockingConstant.BPMC_TYPE_ROLE_RESOURCE)){ + + } + + return BpmcResponseDto.success(); + } } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/BpmcAcceptDto.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/BpmcAcceptDto.java new file mode 100644 index 00000000..dfafae2c --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/BpmcAcceptDto.java @@ -0,0 +1,48 @@ +package com.jero.modules.docking.iam.dto; + +import lombok.Data; + +/** + * 和竹云统一权限服务平台对接的实体 + */ +@Data +public class BpmcAcceptDto { + + /** + * 角色:D_AR (本系统对接) + * 功能权限:D_AM (本系统对接) + * 账号与应用角色关系: R_USER_AR (本系统对接) + * 应用角色与应用功能权限关系:R_AR_AM (本系统对接) + * 账号与功能权限关系:R_USER_AM + * 群组与应用角色关系:R_ACCSET_AR + * 群组与功能权限关系:R_ACCSET_AM + * 机构/岗位与应用角色关系:R_USERSET_AR + * 机构/岗位与功能权限关系:R_USERSET_AM + */ + private String type; + + /** + * 后续基础数据接口、权限关系接口章节中对应操作的entity JSON格式数据字符串 + */ + private String entity; + + /** + * 操作方式 + * 基础数据接口:(add:新增;delete:删除;update:更新) + * 关系数据接口: + * (add:新增;delete:删除;) + */ + private String action; + + /** + * 请求签名,计算方式 + * SHA256 (entity+appKey+timestamp) + */ + private String signature; + + /** + * 时间戳 + */ + private long timestamp; + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/response/BpmcResponseDto.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/response/BpmcResponseDto.java new file mode 100644 index 00000000..ef9698c8 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/response/BpmcResponseDto.java @@ -0,0 +1,27 @@ +package com.jero.modules.docking.iam.dto.response; + +import lombok.Data; + +public class BpmcResponseDto { + + private String returnCode; + + private String returnMsg; + + public static BpmcResponseDto success(){ + BpmcResponseDto bpmcResponseDto = new BpmcResponseDto(); + bpmcResponseDto.returnCode = "200"; // 成功时固定为200 + bpmcResponseDto.returnMsg = "操作成功"; + + return bpmcResponseDto; + } + + public static BpmcResponseDto error(String message){ + BpmcResponseDto bpmcResponseDto = new BpmcResponseDto(); + bpmcResponseDto.returnCode = "500"; // 失败时固定为500 + bpmcResponseDto.returnMsg = message; + + return bpmcResponseDto; + } + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/DockingConstant.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/DockingConstant.java index 7f5f7e21..fdafce0e 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/DockingConstant.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/DockingConstant.java @@ -35,4 +35,24 @@ public class DockingConstant { */ public static String IAM_SUCCESS_MESSAGE = "success"; + /** + * 竹云统一认证平台,接口类型:角色 + */ + public static String BPMC_TYPE_ROLE = "D_AR"; + + /** + * 竹云统一认证平台,接口类型:功能权限 + */ + public static String BPMC_TYPE_RESOURCE = "D_AM"; + + /** + * 竹云统一认证平台,接口类型:账号与应用角色关系 + */ + public static String BPMC_TYPE_USER_ROLE = "R_USER_AR"; + + /** + * 竹云统一认证平台,接口类型:应用角色与应用功能权限关系 + */ + public static String BPMC_TYPE_ROLE_RESOURCE = "R_AR_AM"; + } diff --git a/laws-single-startup/src/main/resources/application-dev.yml b/laws-single-startup/src/main/resources/application-dev.yml index b411e5f4..6644824a 100644 --- a/laws-single-startup/src/main/resources/application-dev.yml +++ b/laws-single-startup/src/main/resources/application-dev.yml @@ -370,4 +370,5 @@ iam: # bimRemoteUser: srmsIam # bimRemotePwd: srmsIam2023 bimRemoteUser: bbcadmin - bimRemotePwd: P@ssw0rd \ No newline at end of file + bimRemotePwd: P@ssw0rd + bpmcAppkey: test \ No newline at end of file