From fa2a5172b2ffba3b40fa14f20fa14f2865899f90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E7=90=A6=E6=B6=9B?= Date: Sun, 4 Aug 2024 15:36:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=B9=E6=8E=A5iam?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jero/modules/system/entity/SysUser.java | 18 + .../service/impl/SysUserServiceImpl.java | 4 + .../docking/iam/client/TestClient.java | 376 ++++++++++++++---- .../{chery => controller}/EncryptTest.java | 6 +- .../{chery => }/entity/AttributeEntity.java | 2 +- .../docking/iam/service/SyncIamService.java | 86 +++- .../BamboocloudCheryUtils.java} | 42 +- .../main/resources/application-dev-chery.yml | 12 +- .../src/main/resources/application-dev.yml | 16 +- 9 files changed, 409 insertions(+), 153 deletions(-) rename laws-modules-docking/src/main/java/com/jero/modules/docking/iam/{chery => controller}/EncryptTest.java (78%) rename laws-modules-docking/src/main/java/com/jero/modules/docking/iam/{chery => }/entity/AttributeEntity.java (93%) rename laws-modules-docking/src/main/java/com/jero/modules/docking/{iam/chery/service/BamboocloudUtils.java => utils/BamboocloudCheryUtils.java} (57%) diff --git a/laws-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java b/laws-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java index 6692e215..506f78ea 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java @@ -271,6 +271,24 @@ public class SysUser implements Serializable { private String source; + /** + * 入职时间 + */ + @ApiModelProperty(value = "入职时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date entryTime; + + + /** + * 离职时间 + */ + @ApiModelProperty(value = "离职时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date resignationTime; + + /** * 拼接真实姓名和工号形成唯一的用户信息可用户查看 * 不能用get开头,否则会造成初始化queryWrapper的bug diff --git a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java index 989ec9f1..565fc540 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java @@ -779,6 +779,10 @@ public class SysUserServiceImpl extends ServiceImpl impl lambdaUpdateWrapper.set(SysUser::getCreateBy,user.getCreateBy()); lambdaUpdateWrapper.set(SysUser::getUpdateTime,user.getUpdateTime()); lambdaUpdateWrapper.set(SysUser::getUpdateBy,user.getUpdateBy()); + lambdaUpdateWrapper.set(SysUser::getBirthday,user.getBirthday()); + lambdaUpdateWrapper.set(SysUser::getEntryTime,user.getEntryTime()); + lambdaUpdateWrapper.set(SysUser::getResignationTime,user.getResignationTime()); + lambdaUpdateWrapper.set(SysUser::getFeishuId,user.getFeishuId()); update(lambdaUpdateWrapper); // this.updateById(user); diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/client/TestClient.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/client/TestClient.java index ea029e99..07609303 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/client/TestClient.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/client/TestClient.java @@ -1,12 +1,16 @@ package com.jero.modules.docking.iam.client; import cn.hutool.http.HttpUtil; -import com.bamboocloud.codec.BamboocloudFacade; +import com.alibaba.fastjson.JSON; +import com.banboocloud.Codec.BamboocloudFacade; +import com.banboocloud.Codec.Sm3Signature; +import com.banboocloud.Codec.Sm4Cipher; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.jero.common.util.DateUtils; import com.jero.common.util.UUIDGenerator; import com.jero.common.util.UUIDUtils; +import com.jero.modules.docking.utils.BamboocloudCheryUtils; import com.jero.modules.docking.iam.dto.IamCommonAcceptDto; import com.jero.modules.docking.iam.dto.IamOrgAcceptDto; import com.jero.modules.docking.iam.dto.IamUserAcceptDto; @@ -15,45 +19,54 @@ import com.jero.modules.docking.iam.po.MessageHeader; import com.jero.modules.docking.iam.po.encrypt.MessageEncryptTabels; import com.jero.modules.docking.iam.po.encrypt.MessageEncryptTabelsHeader; import com.jero.modules.docking.iam.po.encrypt.SendPoEncryptPo; -import com.jero.modules.docking.utils.BamboocloudUtils; import com.jero.modules.docking.utils.DockingConstant; +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; +import java.lang.reflect.Field; import java.util.Date; +import java.util.Map; +import java.util.Objects; +import java.util.TreeMap; /** * 测试接口是否正确的客户端,mock IAM发送请求 */ public class TestClient { + //SM4 + private String key = "JLB6L6MJVIT5Z7IL"; + private String type = "SM4"; + public static void main(String[] args) throws JsonProcessingException { TestClient testClient = new TestClient(); // testClient.sendSchemaService(); // 字段映射接口测试 -// for (int i = 0; i < 1; i++) { +// for (int i = 1; i < 2; i++) { // System.out.println(i); // testClient.sendUserCreate(i); // } // 创建用户接口测试 // testClient.sendUserUpdate(); // 更新用户接口测试 +// testClient.sendUserDel(); // 更新用户接口测试 // testClient.sendOrgCreate(); // 组织创建接口测试 +// testClient.sendOrgUpdate(); // 组织修改接口测试 +// testClient.sendOrgDel(); // 组织删除接口测试 // testClient.sendQueryAllUserIdsService(); // 查询所有用户ID接口测试 // testClient.sendQueryAllOrgIdsService(); // 查询所有组织ID接口测试 // testClient.sendQueryOrgByIdService(); // 查询指定id的组织数据测试 -// testClient.sendQueryUserByIdService(); // 查询指定id的用户数据测试 - testClient.decryptSting("8rAKWPUwkEZ3yYLy/1TuGGkIGCYtc+MD56pShLi97OmMttoFooo5GXZ/lY4NrQ5DiWmVUX23zqDwyQqufXLZNDU+KuJO/9UonpqUlZxM91w="); + testClient.sendQueryUserByIdService(); // 查询指定id的用户数据测试 +// testClient.decryptSting("8rAKWPUwkEZ3yYLy/1TuGGkIGCYtc+MD56pShLi97OmMttoFooo5GXZ/lY4NrQ5DiWmVUX23zqDwyQqufXLZNDU+KuJO/9UonpqUlZxM91w="); } private void decryptSting(String encryptString) { - String decrypt = BamboocloudUtils.getPlaintext(encryptString, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + String decrypt = BamboocloudCheryUtils.getPlaintext(encryptString, key, type); System.out.println("解密后数据:" + decrypt); } // 对数据解密 private void decryptData(String encryptData) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - SendPoEncryptPo sendPoEncryptPo = objectMapper.readValue(encryptData, SendPoEncryptPo.class); - String decrypt = BamboocloudUtils.getPlaintext(sendPoEncryptPo.getReturns().getData(), DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); - - System.out.println("解密后数据:" + decrypt); + String res = BamboocloudFacade.decrypt(encryptData, key, type); + System.out.println("解密后数据:" + res); } /** @@ -89,24 +102,54 @@ public class TestClient { /** * Schema映射获取 */ - private void sendSchemaService() throws JsonProcessingException { - String url = "http://localhost:8184/laws-sinotruk/sync/iam/UserCreateService"; + private void sendSchemaService() { + String url = "http://localhost:8188/laws-chery/sync/iam/chery/SchemaService"; IamCommonAcceptDto iamCommonAcceptDto = new IamCommonAcceptDto(); iamCommonAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); iamCommonAcceptDto.setBimRemoteUser("srmsIam"); iamCommonAcceptDto.setBimRemotePwd("srmsIam2023"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamCommonAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamCommonAcceptDto); - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamCommonAcceptDto.setSignature(signatureStr); - String response = HttpUtil.post(url, sendPoDataJson); + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamCommonAcceptDto); + String target = sm4Cipher.encrypt(source, key); + //输出密文 + System.out.println("加密:" + target); + //输出解密 + System.out.println("解密:" + sm4Cipher.decrypt(target,key)); + String response = HttpUtil.post(url, target); System.out.println("映射接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("映射接口响应解密:" + res); + } + + @NotNull + private StringBuilder getStringBuilder(IamCommonAcceptDto iamCommonAcceptDto) { + Map reqMap = (Map) JSON.parse(JSON.toJSONString(iamCommonAcceptDto)); + + Map verifymap = new TreeMap<>(); + StringBuilder sb = new StringBuilder(); + for (String key : reqMap.keySet()) { + verifymap.put(key, reqMap.get(key)); + } + for (String key : verifymap.keySet()) { + if (!"signature".equals(key)) { + sb.append(key).append("=").append(verifymap.get(key)).append("&"); + } + } + sb.deleteCharAt(sb.length() - 1); + System.out.println(reqMap.get("signature") + " now " + sb.toString()); + return sb; } /** @@ -122,25 +165,36 @@ public class TestClient { iamUserAcceptDto.setSrmsSex("1"); // 男 iamUserAcceptDto.setSrmsPhone("13811112232"); iamUserAcceptDto.setSrmsEmail("test@sinotruk.com"); - + iamUserAcceptDto.setEmployeeNo("1111"); iamUserAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); iamUserAcceptDto.setBimRemoteUser("srmsIam"); iamUserAcceptDto.setBimRemotePwd("srmsIam2023"); + iamUserAcceptDto.setBirthday("2024-05-01"); + iamUserAcceptDto.setEntryTime("2024-06-01"); + iamUserAcceptDto.setResignationTime("2024-07-01"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamUserAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamUserAcceptDto); + + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamUserAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamUserAcceptDto); + String target = sm4Cipher.encrypt(source, key); - // 封装 AcceptPoSystemPo 为PO层套壳 - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); // 发送数据 - String url = "http://localhost:8184/laws-sinotruk/sync/iam/UserCreateService"; -// String url = "laws-test.sinotruk.com/laws-sinotruk/sync/iam/UserCreateService"; - String response = HttpUtil.post(url, sendPoDataJson); + String url = "http://localhost:8188/laws-chery/sync/iam/chery/UserCreateService"; +// String url = "laws-test.sinotruk.com/laws-chery/sync/iam/chery/UserCreateService"; + String response = HttpUtil.post(url, target); System.out.println("用户创建接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("用户创建接口响应解密:" + res); } /** @@ -149,25 +203,70 @@ public class TestClient { private void sendUserUpdate() throws JsonProcessingException { // 封装 IamUserAcceptDto 为用户数据层 IamUserAcceptDto iamUserAcceptDto = new IamUserAcceptDto(); - iamUserAcceptDto.setBimUid("1709786346053017601"); // 数据库中取到的ID + iamUserAcceptDto.setBimUid("1803973103451799554"); // 数据库中取到的ID + iamUserAcceptDto.setBirthday("2018-12-05 00:00:00"); + iamUserAcceptDto.setBirthday("2024-05-01"); + iamUserAcceptDto.setEntryTime("2024-06-01"); + iamUserAcceptDto.setResignationTime("2024-07-01"); + iamUserAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); + iamUserAcceptDto.setEmployeeNo("feishuid"); + iamUserAcceptDto.setBimRemoteUser("srmsIam"); + iamUserAcceptDto.setBimRemotePwd("srmsIam2023"); + StringBuilder sb = getStringBuilder(iamUserAcceptDto); + + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamUserAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamUserAcceptDto); + String target = sm4Cipher.encrypt(source, key); + + // 发送数据 + String url = "http://localhost:8188/laws-chery/sync/iam/chery/UserUpdateService"; + String response = HttpUtil.post(url, target); + System.out.println("用户更新接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("用户更新接口响应解密:" + res); + } + + + /** + * 用户删除测试 + */ + private void sendUserDel() throws JsonProcessingException { + // 封装 IamUserAcceptDto 为用户数据层 + IamUserAcceptDto iamUserAcceptDto = new IamUserAcceptDto(); + iamUserAcceptDto.setBimUid("1819982931501633537"); // 数据库中取到的ID iamUserAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); iamUserAcceptDto.setBimRemoteUser("srmsIam"); iamUserAcceptDto.setBimRemotePwd("srmsIam2023"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamUserAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamUserAcceptDto); - // 封装 AcceptPoSystemPo 为PO层套壳 - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamUserAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamUserAcceptDto); + String target = sm4Cipher.encrypt(source, key); // 发送数据 - String url = "http://localhost:8184/laws-sinotruk/sync/iam/UserUpdateService"; - String response = HttpUtil.post(url, sendPoDataJson); - System.out.println("用户更新接口响应:" + response); + String url = "http://localhost:8188/laws-chery/sync/iam/chery/UserDeleteService"; + String response = HttpUtil.post(url, target); + System.out.println("用户删除接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("用户删除接口响应解密:" + res); } /** @@ -177,7 +276,7 @@ public class TestClient { // 封装 IamUserAcceptDto 为用户数据层 IamOrgAcceptDto iamOrgAcceptDto = new IamOrgAcceptDto(); - iamOrgAcceptDto.setSrmsOrgCode("IA00102"); + iamOrgAcceptDto.setSrmsOrgCode("IA00104"); iamOrgAcceptDto.setSrmsDepartName("测试IAM部门"); iamOrgAcceptDto.setSrmsParentCode(""); @@ -185,42 +284,127 @@ public class TestClient { iamOrgAcceptDto.setBimRemoteUser("srmsIam"); iamOrgAcceptDto.setBimRemotePwd("srmsIam2023"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamOrgAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamOrgAcceptDto); - // 封装 AcceptPoSystemPo 为PO层套壳 - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamOrgAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamOrgAcceptDto); + String target = sm4Cipher.encrypt(source, key); // 发送数据 - String url = "http://localhost:8184/laws-sinotruk/sync/iam/OrgCreateService"; - String response = HttpUtil.post(url, sendPoDataJson); + String url = "http://localhost:8188/laws-chery/sync/iam/chery/OrgCreateService"; + String response = HttpUtil.post(url, target); System.out.println("组织创建接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("组织创建接口响应解密:" + res); + } + + + /** + * 用户修改测试 + */ + private void sendOrgUpdate() throws JsonProcessingException { + // 封装 IamUserAcceptDto 为用户数据层 + IamOrgAcceptDto iamOrgAcceptDto = new IamOrgAcceptDto(); + iamOrgAcceptDto.setBimOrgId("IA00104"); + iamOrgAcceptDto.setSrmsOrgCode("IA00104"); + iamOrgAcceptDto.setSrmsDepartName("测试IAM部门1"); + iamOrgAcceptDto.setSrmsParentCode(""); + + iamOrgAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); + iamOrgAcceptDto.setBimRemoteUser("srmsIam"); + iamOrgAcceptDto.setBimRemotePwd("srmsIam2023"); + + StringBuilder sb = getStringBuilder(iamOrgAcceptDto); + + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamOrgAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamOrgAcceptDto); + String target = sm4Cipher.encrypt(source, key); + + // 发送数据 + String url = "http://localhost:8188/laws-chery/sync/iam/chery/OrgUpdateService"; + String response = HttpUtil.post(url, target); + System.out.println("组织修改接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("组织修改接口响应解密:" + res); + } + + /** + * 用户删除测试 + */ + private void sendOrgDel() throws JsonProcessingException { + // 封装 IamUserAcceptDto 为用户数据层 + IamOrgAcceptDto iamOrgAcceptDto = new IamOrgAcceptDto(); + iamOrgAcceptDto.setBimOrgId("IA00104"); + + iamOrgAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); + iamOrgAcceptDto.setBimRemoteUser("srmsIam"); + iamOrgAcceptDto.setBimRemotePwd("srmsIam2023"); + + StringBuilder sb = getStringBuilder(iamOrgAcceptDto); + + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamOrgAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamOrgAcceptDto); + String target = sm4Cipher.encrypt(source, key); + + // 发送数据 + String url = "http://localhost:8188/laws-chery/sync/iam/chery/OrgDeleteService"; + String response = HttpUtil.post(url, target); + System.out.println("组织删除接口响应:" + response); + String res = BamboocloudFacade.decrypt(response, key, type); + System.out.println("组织删除接口响应解密:" + res); } /** * 获取全部用户id */ private void sendQueryAllUserIdsService() throws JsonProcessingException { - String url = "http://localhost:8184/laws-sinotruk/sync/iam/QueryAllUserIdsService"; + String url = "http://localhost:8188/laws-chery/sync/iam/chery/QueryAllUserIdsService"; IamCommonAcceptDto iamCommonAcceptDto = new IamCommonAcceptDto(); iamCommonAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); iamCommonAcceptDto.setBimRemoteUser("srmsIam"); iamCommonAcceptDto.setBimRemotePwd("srmsIam2023"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamCommonAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamCommonAcceptDto); - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); - String response = HttpUtil.post(url, sendPoDataJson); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamCommonAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamCommonAcceptDto); + String target = sm4Cipher.encrypt(source, key); + + String response = HttpUtil.post(url, target); System.out.println("查询全部用户id接口响应:" + response); - this.decryptData(response); } @@ -228,22 +412,28 @@ public class TestClient { * 获取全部组织id */ private void sendQueryAllOrgIdsService() throws JsonProcessingException { - String url = "http://localhost:8184/laws-sinotruk/sync/iam/QueryAllOrgIdsService"; + String url = "http://localhost:8188/laws-chery/sync/iam/chery/QueryAllOrgIdsService"; IamCommonAcceptDto iamCommonAcceptDto = new IamCommonAcceptDto(); iamCommonAcceptDto.setBimRequestId(UUIDUtils.randomUUID20()); iamCommonAcceptDto.setBimRemoteUser("srmsIam"); iamCommonAcceptDto.setBimRemotePwd("srmsIam2023"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamCommonAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamCommonAcceptDto); - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamCommonAcceptDto.setSignature(signatureStr); - String response = HttpUtil.post(url, sendPoDataJson); + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamCommonAcceptDto); + String target = sm4Cipher.encrypt(source, key); + + String response = HttpUtil.post(url, target); System.out.println("查询全部组织id接口响应:" + response); this.decryptData(response); @@ -255,22 +445,27 @@ public class TestClient { private void sendQueryUserByIdService() throws JsonProcessingException { // 封装 IamUserAcceptDto 为用户数据层 IamUserAcceptDto iamUserAcceptDto = new IamUserAcceptDto(); - iamUserAcceptDto.setBimUid("1709786346053017601"); // 数据库中取到的ID + iamUserAcceptDto.setBimUid("1819982931501633537"); // 数据库中取到的ID iamUserAcceptDto.setBimRemoteUser("srmsIam"); iamUserAcceptDto.setBimRemotePwd("srmsIam2023"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamUserAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamUserAcceptDto); - // 封装 AcceptPoSystemPo 为PO层套壳 - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamUserAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamUserAcceptDto); + String target = sm4Cipher.encrypt(source, key); // 发送数据 - String url = "http://localhost:8184/laws-sinotruk/sync/iam/QueryUserByIdService"; - String response = HttpUtil.post(url, sendPoDataJson); + String url = "http://localhost:8188/laws-chery/sync/iam/chery/QueryUserByIdService"; + String response = HttpUtil.post(url, target); System.out.println("用户查询接口响应:" + response); this.decryptData(response); @@ -286,18 +481,23 @@ public class TestClient { iamOrgAcceptDto.setBimRemoteUser("srmsIam"); iamOrgAcceptDto.setBimRemotePwd("srmsIam2023"); - // 加密数据 - ObjectMapper objectMapper = new ObjectMapper(); - String sendData = objectMapper.writeValueAsString(iamOrgAcceptDto); - String encryptData = BamboocloudFacade.encrypt(sendData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + StringBuilder sb = getStringBuilder(iamOrgAcceptDto); - // 封装 AcceptPoSystemPo 为PO层套壳 - AcceptEncryptPo sendPoDataEntity = handlerPoPackage(encryptData); - String sendPoDataJson = objectMapper.writeValueAsString(sendPoDataEntity); + System.out.println("签名前:" + sb.toString()); + //sm3签名 + Sm3Signature signature = new Sm3Signature(); + String signatureStr = signature.signature(sb.toString()); + System.out.println("签名后:" + signatureStr); + iamOrgAcceptDto.setSignature(signatureStr); + + //sm4加解密 + Sm4Cipher sm4Cipher = new Sm4Cipher(); + String source = JSON.toJSONString(iamOrgAcceptDto); + String target = sm4Cipher.encrypt(source, key); // 发送数据 - String url = "http://localhost:8184/laws-sinotruk/sync/iam/QueryOrgByIdService"; - String response = HttpUtil.post(url, sendPoDataJson); + String url = "http://localhost:8188/laws-chery/sync/iam/chery/QueryOrgByIdService"; + String response = HttpUtil.post(url, target); System.out.println("组织查询接口响应:" + response); this.decryptData(response); diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/EncryptTest.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/EncryptTest.java similarity index 78% rename from laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/EncryptTest.java rename to laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/EncryptTest.java index e329a3a5..b0aa5d02 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/EncryptTest.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/controller/EncryptTest.java @@ -1,7 +1,8 @@ -package com.jero.modules.docking.iam.chery; +package com.jero.modules.docking.iam.controller; import com.banboocloud.Codec.Sm3Signature; import com.banboocloud.Codec.Sm4Cipher; + public class EncryptTest { public static void main(String[] args) { //sm3签名 @@ -14,11 +15,8 @@ public class EncryptTest { Sm4Cipher sm4Cipher = new Sm4Cipher(); String source = "{\"userId\":1,\"signature\":\"" + signatureStr + "\"}"; String target = sm4Cipher.encrypt(source, key); - String sourceNew = sm4Cipher.decrypt(target,key); //输出密文 System.out.println("target:" + target); - //输出明文 - System.out.println("sourceNew:" + sourceNew); } } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/entity/AttributeEntity.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/entity/AttributeEntity.java similarity index 93% rename from laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/entity/AttributeEntity.java rename to laws-modules-docking/src/main/java/com/jero/modules/docking/iam/entity/AttributeEntity.java index a9d24207..a5fe7726 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/entity/AttributeEntity.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/entity/AttributeEntity.java @@ -1,4 +1,4 @@ -package com.jero.modules.docking.iam.chery.entity; +package com.jero.modules.docking.iam.entity; public class AttributeEntity { private String name; 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 da63bc6a..6e1252de 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 @@ -28,7 +28,7 @@ import com.jero.modules.docking.iam.exception.IamGlobalException; import com.jero.modules.docking.iam.po.MessageHeader; import com.jero.modules.docking.iam.po.encrypt.SendEncryptReturnsPo; import com.jero.modules.docking.iam.po.encrypt.SendPoEncryptPo; -import com.jero.modules.docking.iam.chery.service.BamboocloudUtils; +import com.jero.modules.docking.utils.BamboocloudCheryUtils; import com.jero.modules.docking.utils.DockingConstant; import com.jero.modules.system.entity.*; import com.jero.modules.system.service.*; @@ -43,6 +43,8 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -104,17 +106,21 @@ public class SyncIamService { * @return */ public String getStringObjectMap(HttpServletRequest req) { - String bodyparam = BamboocloudUtils.getRequestBody(req); - System.out.println("first--param-->" + bodyparam); - //报文解密 - bodyparam = BamboocloudUtils.getPlaintext(bodyparam, key, type); - System.out.println("json--param-->" + bodyparam); - Map reqMap = (Map) JSON.parse(bodyparam); - //验证签名 - if (!BamboocloudUtils.verify(reqMap, signType)) { - throw new IamGlobalException(reqMap.getOrDefault("bimRequestId","").toString(), PARAM_NOT_GET_ERROR); + try { + String bodyparam = BamboocloudCheryUtils.getRequestBody(req); + System.out.println("first--param-->" + bodyparam); + //报文解密 + bodyparam = BamboocloudCheryUtils.getPlaintext(bodyparam, key, type); + System.out.println("json--param-->" + bodyparam); + Map reqMap = (Map) JSON.parse(bodyparam); + //验证签名 + if (!BamboocloudCheryUtils.verify(reqMap, signType)) { + throw new IamGlobalException(reqMap.getOrDefault("bimRequestId","").toString(), PARAM_NOT_GET_ERROR); + } + return JSON.toJSONString(reqMap); + }catch (Exception e){ + throw new IamGlobalException("", PARAM_NOT_GET_ERROR); } - return JSON.toJSONString(reqMap); } /** @@ -206,6 +212,33 @@ public class SyncIamService { SysUser sysUser = new SysUser(); sysUser.setUsername(userAcceptDto.getSrmsUsername()); sysUser.setRealname(userAcceptDto.getSrmsRealname()); + try { + if(StringUtils.isEmpty(userAcceptDto.getBirthday())){ + sysUser.setBirthday(null); + }else{ + sysUser.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(userAcceptDto.getBirthday())); + } + } catch (ParseException e) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(),"生日格式错误,请输入(yyyy-MM-dd)"); + } + try { + if(StringUtils.isEmpty(userAcceptDto.getEntryTime())){ + sysUser.setEntryTime(null); + }else{ + sysUser.setEntryTime(new SimpleDateFormat("yyyy-MM-dd").parse(userAcceptDto.getEntryTime())); + } + } catch (ParseException e) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(),"入职时间格式错误,请输入(yyyy-MM-dd)"); + } + try { + if(StringUtils.isEmpty(userAcceptDto.getResignationTime())){ + sysUser.setResignationTime(null); + }else{ + sysUser.setResignationTime(new SimpleDateFormat("yyyy-MM-dd").parse(userAcceptDto.getResignationTime())); + } + } catch (ParseException e) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(),"离职时间格式错误,请输入(yyyy-MM-dd)"); + } sysUser.setPassword(CommonConstant.DEFAULT_PASSWORD); String salt = UUIDUtils.randomUUID(8); @@ -229,6 +262,7 @@ public class SyncIamService { // 设置飞书id, IAM村的id就是飞书id sysUser.setFeishuId(userAcceptDto.getEmployeeNo()); sysUser.setTypeId(userAcceptDto.getSrmsTypeId()); + sysUser.setStatus(1); // 获取组织机构(多个逗号分隔) String orgCode = userAcceptDto.getSrmsOrgCode(); @@ -280,7 +314,33 @@ public class SyncIamService { if (CharSequenceUtil.isNotEmpty(userAcceptDto.getSrmsTypeId())){ sysUser.setTypeId(userAcceptDto.getSrmsTypeId()); } - + try { + if(StringUtils.isEmpty(userAcceptDto.getBirthday())){ + sysUser.setBirthday(null); + }else{ + sysUser.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(userAcceptDto.getBirthday())); + } + } catch (ParseException e) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(),"生日格式错误,请输入(yyyy-MM-dd)"); + } + try { + if(StringUtils.isEmpty(userAcceptDto.getEntryTime())){ + sysUser.setEntryTime(null); + }else{ + sysUser.setEntryTime(new SimpleDateFormat("yyyy-MM-dd").parse(userAcceptDto.getEntryTime())); + } + } catch (ParseException e) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(),"入职时间格式错误,请输入(yyyy-MM-dd)"); + } + try { + if(StringUtils.isEmpty(userAcceptDto.getResignationTime())){ + sysUser.setResignationTime(null); + }else{ + sysUser.setResignationTime(new SimpleDateFormat("yyyy-MM-dd").parse(userAcceptDto.getResignationTime())); + } + } catch (ParseException e) { + throw new IamGlobalException(userAcceptDto.getBimRequestId(),"离职时间格式错误,请输入(yyyy-MM-dd)"); + } // 设置飞书id, IAM村的id就是飞书id sysUser.setFeishuId(userAcceptDto.getEmployeeNo()); @@ -375,7 +435,7 @@ public class SyncIamService { // 存储到组织机构表中 this.sysDepartService.save(sysDepart); - + iamOrgCreateResponse.setUid(sysDepart.getId()); return iamOrgCreateResponse; } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/service/BamboocloudUtils.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/BamboocloudCheryUtils.java similarity index 57% rename from laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/service/BamboocloudUtils.java rename to laws-modules-docking/src/main/java/com/jero/modules/docking/utils/BamboocloudCheryUtils.java index f7127207..2252e0d8 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/chery/service/BamboocloudUtils.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/BamboocloudCheryUtils.java @@ -1,51 +1,26 @@ -package com.jero.modules.docking.iam.chery.service; +package com.jero.modules.docking.utils; import com.banboocloud.Codec.BamboocloudFacade; import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; -import java.util.Iterator; import java.util.Map; -import java.util.Properties; import java.util.TreeMap; -public abstract class BamboocloudUtils { - private static Properties properties = new Properties(); - private static InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("application.properties"); - - static { - try { - properties.load(in); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public static String getProperty(String property) { - return properties.getProperty(property); - } - - public static void checkUsernamePassword(String username, String password) { - System.out.println("username --->" + username + " password --- >" + password + " ----ok"); - } +public class BamboocloudCheryUtils { public static String getPlaintext(String ciphertext, String key, String type) { return BamboocloudFacade.decrypt(ciphertext, key, type); } public static Boolean verify(Map reqmap, String type) { - Map verifymap = new TreeMap(); - StringBuffer sb = new StringBuffer(); - Iterator it = reqmap.keySet().iterator(); - while (it.hasNext()) { - String key = (String) it.next(); + Map verifymap = new TreeMap<>(); + StringBuilder sb = new StringBuilder(); + for (String key : reqmap.keySet()) { verifymap.put(key, reqmap.get(key)); } - Iterator ittree = verifymap.keySet().iterator(); - while (ittree.hasNext()) { - String key = (String) ittree.next(); + for (String key : verifymap.keySet()) { if (!"signature".equals(key)) { sb.append(key).append("=").append(verifymap.get(key)).append("&"); } @@ -58,7 +33,7 @@ public abstract class BamboocloudUtils { public static String getRequestBody(HttpServletRequest request) { BufferedReader br = null; StringBuilder sb = new StringBuilder(); - String str = ""; + String str; try { br = request.getReader(); while ((str = br.readLine()) != null) { @@ -67,12 +42,13 @@ public abstract class BamboocloudUtils { br.close(); } catch (IOException e) { e.printStackTrace(); - if (br != null) + if (br != null) { try { br.close(); } catch (IOException eo) { eo.printStackTrace(); } + } } finally { if (br != null) { try { diff --git a/laws-single-startup/src/main/resources/application-dev-chery.yml b/laws-single-startup/src/main/resources/application-dev-chery.yml index 8f8d898a..c6e9678a 100644 --- a/laws-single-startup/src/main/resources/application-dev-chery.yml +++ b/laws-single-startup/src/main/resources/application-dev-chery.yml @@ -397,7 +397,7 @@ hiwork: # 是否推送统一待办 isWorkflow: true # 前端调用地址 - url: https://iam-uat.sinotruk.com:7011/idp/oauth2/authorize?&state=123&client_id=SRMS&response_type=code&redirect_uri= + url: https://iamuat.mychery.com:5443/idp/oauth2/authorize?state=123456&client_id=CGRSM&redirect_uri= fontUrl: http://localhost:3344{url}?projectId={projectId}&taskName={taskName}&taskId={taskId}&processInstanceId={processInstanceId}&nodeId={nodeId} fontAppUrl: http://localhost:3344/mobile{url}?projectId={projectId}&taskName={taskName}&taskId={taskId}&processInstanceId={processInstanceId}&nodeId={nodeId} #hiwork单点登录 @@ -418,16 +418,16 @@ asms: # 单点登录配置(所有配置信息需要协调注册,现在都为假) oauth: - # 客户端应用注册ID--客户申请的:SRMS - clientId: SRMS + # 客户端应用注册ID--客户申请的:CGRSM + clientId: CGRSM # 客户端应用注册密钥 客户申请的:58a1001438de462193bec307826463c2 clientSecret: 58a1001438de462193bec307826463c2 # 授权码验证 grantType: authorization_code # 通过授权码获取accessToken请求地址 - accessTokenUrl: https://iam-uat-new.sinotruk.com/idp/oauth2/getToken + accessTokenUrl: https://iamuat.mychery.com:5443/idp/oauth2/getToken # 通过accessToken获取账号信息请求地址 - userInfoUrl: https://iam-uat-new.sinotruk.com/idp/oauth2/getUserInfo + userInfoUrl: https://iamuat.mychery.com:5443/idp/oauth2/getUserInfo # 防止跨站请求伪造(CSRF)标识(暂时不用) state: zhongQi @@ -435,7 +435,7 @@ oa: url: http://oa getAccessTokenUrl: ${oa.url}/getAccessToken getTicketInfoUrl: ${oa.url}/getTicketInfo - appId: SRMS + appId: CGRSM appSecret: 196b2e1f-127f-47d5-8e33-746fb8ad0387 # 起草部门部门名称 diff --git a/laws-single-startup/src/main/resources/application-dev.yml b/laws-single-startup/src/main/resources/application-dev.yml index 3ad2f140..66a0d8ff 100644 --- a/laws-single-startup/src/main/resources/application-dev.yml +++ b/laws-single-startup/src/main/resources/application-dev.yml @@ -385,7 +385,7 @@ iam: hiwork: ip: http://10.2.5.218:8088/ # 异构系统标识 - sysCode: SRMS + sysCode: CGRSM # 服务号 serviceCode: SRMSService # 统一待办集成 @@ -397,7 +397,7 @@ hiwork: # 是否推送统一待办 isWorkflow: false # 前端调用地址 - url: https://iam-uat.sinotruk.com:7011/idp/oauth2/authorize?&state=123&client_id=SRMS&response_type=code&redirect_uri= + url: https://iamuat.mychery.com:5443/idp/oauth2/authorize?state=123456&client_id=CGRSM&redirect_uri= fontUrl: http://localhost:3344{url}?projectId={projectId}&taskName={taskName}&taskId={taskId}&processInstanceId={processInstanceId}&nodeId={nodeId} fontAppUrl: http://localhost:3344/mobile{url}?projectId={projectId}&taskName={taskName}&taskId={taskId}&processInstanceId={processInstanceId}&nodeId={nodeId} #hiwork单点登录 @@ -418,16 +418,16 @@ asms: # 单点登录配置(所有配置信息需要协调注册,现在都为假) oauth: - # 客户端应用注册ID--客户申请的:SRMS - clientId: SRMS + # 客户端应用注册ID--客户申请的:CGRSM + clientId: CGRSM # 客户端应用注册密钥 客户申请的:58a1001438de462193bec307826463c2 clientSecret: 58a1001438de462193bec307826463c2 # 授权码验证 grantType: authorization_code # 通过授权码获取accessToken请求地址 - accessTokenUrl: https://iam-uat-new.sinotruk.com/idp/oauth2/getToken + accessTokenUrl: https://iamuat.mychery.com:5443/idp/oauth2/getToken # 通过accessToken获取账号信息请求地址 - userInfoUrl: https://iam-uat-new.sinotruk.com/idp/oauth2/getUserInfo + userInfoUrl: https://iamuat.mychery.com:5443/idp/oauth2/getUserInfo # 防止跨站请求伪造(CSRF)标识(暂时不用) state: zhongQi @@ -460,12 +460,12 @@ download: # 加密参数 encrypt: url: http://10.2.159.90/intekey/encrypteFile - app_code: SRMS + app_code: CGRSM secret_key: SRMS1234.. # 解密参数 decrypt: url: http://10.2.159.90/intekey/file - app_code: SRMS + app_code: CGRSM secret_key: SRMS1234.. # 研发域 scope_dev: 51