diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/annotation/IamProperty.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/annotation/IamProperty.java new file mode 100644 index 00000000..66d17bc9 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/annotation/IamProperty.java @@ -0,0 +1,35 @@ +package com.jero.modules.docking.iam.annotation; + +import java.lang.annotation.*; + +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface IamProperty { + +// /** +// * 字段属性名 +// * @return +// */ +// String name() default ""; +// +// /** +// * +// * @return +// */ +// String type() default ""; + + /** + * 定义对象的属性字段在创建时是否为必填字段 + * @return + */ + boolean required() default true; + + /** + * 定义对象的属性字段是否为多值 + * @return + */ + boolean multivalued() default false; + +} 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 65b4aced..076c7dd0 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,19 +1,38 @@ package com.jero.modules.docking.iam.controller; +import com.bamboocloud.codec.BamboocloudFacade; +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.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.exception.IamGlobalException; import com.jero.modules.docking.iam.po.AcceptPoSystemPo; +import com.jero.modules.docking.iam.po.MessageHeader; import com.jero.modules.docking.iam.po.SendPoSystemPo; +import com.jero.modules.docking.iam.po.SendReturnsPo; +import com.jero.modules.docking.iam.service.SyncIamService; +import com.jero.modules.docking.utils.BamboocloudUtils; +import com.jero.modules.docking.utils.DockingConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Date; +import java.util.Map; + /** * IAM同步的控制器,提供用户、组织、菜单和权限的同步 */ @@ -22,51 +41,76 @@ import org.springframework.web.bind.annotation.RestController; @Slf4j public class SyncIamController { + @Resource + private SyncIamService syncIamService; + @PostMapping({"/SchemaService"}) - public SendPoSystemPo SchemaService(@RequestBody AcceptPoSystemPo iamCommon) { - SendPoSystemPo sendPoSystemPo = new SendPoSystemPo<>(); + public SendPoSystemPo SchemaService(@RequestBody AcceptPoSystemPo iamCommon) throws JsonProcessingException { + if (iamCommon == null + || iamCommon.getMessageTabels() == null + || iamCommon.getMessageTabels().getHeader() == null + || iamCommon.getMessageTabels().getHeader().getData() == null){ + throw new IamGlobalException(null, "参数传递错误,未收到参数"); + } + + // 对核心数据解密 + String bodyParam = iamCommon.getMessageTabels().getHeader().getData(); + String bodyParamDecrypt = BamboocloudUtils.getPlaintext(bodyParam, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + + ObjectMapper objectMapper = new ObjectMapper(); + IamCommonAcceptDto commonAcceptDto = objectMapper.readValue(bodyParamDecrypt, IamCommonAcceptDto.class); + + // 校验身份认证,确保接口正确 必须调用! + this.syncIamService.validateUserAndPwd(commonAcceptDto); + + // 处理业务逻辑,封装字段 + IamSchemaResponse iamSchemaResponse = this.syncIamService.getSchemaInfo(commonAcceptDto); + + // 处理统一响应PO层,并加密业务字段 + MessageHeader acceptMessageHeader = iamCommon.getMessageHeader(); + SendPoSystemPo sendPoSystemPo = this.syncIamService.handlerGloablResponse(acceptMessageHeader, iamSchemaResponse); return sendPoSystemPo; } @PostMapping({"/UserCreateService"}) - public SendPoSystemPo userCreateService(@RequestBody AcceptPoSystemPo iamUserInfo) { - SendPoSystemPo sendPoSystemPo = new SendPoSystemPo<>(); + public SendPoSystemPo userCreateService(@RequestBody AcceptPoSystemPo iamUserInfo) { + SendPoSystemPo sendPoSystemPo = new SendPoSystemPo(); return sendPoSystemPo; } @PostMapping({"/UserUpdateService"}) - public SendPoSystemPo UserUpdateService(@RequestBody AcceptPoSystemPo iamUserInfo) { - SendPoSystemPo sendPoSystemPo = new SendPoSystemPo<>(); + public SendPoSystemPo UserUpdateService(@RequestBody AcceptPoSystemPo iamUserInfo) { + SendPoSystemPo sendPoSystemPo = new SendPoSystemPo(); return sendPoSystemPo; } @PostMapping({"/UserDeleteService"}) - public SendPoSystemPo UserDeleteService(@RequestBody AcceptPoSystemPo iamUserInfo) { - SendPoSystemPo sendPoSystemPo = new SendPoSystemPo<>(); + public SendPoSystemPo UserDeleteService(@RequestBody AcceptPoSystemPo iamUserInfo) { + SendPoSystemPo sendPoSystemPo = new SendPoSystemPo(); return sendPoSystemPo; } @PostMapping({"/OrgCreateService"}) - public SendPoSystemPo OrgCreateService(@RequestBody AcceptPoSystemPo iamOrgInfo) { - SendPoSystemPo sendPoSystemPo = new SendPoSystemPo<>(); + public SendPoSystemPo OrgCreateService(@RequestBody AcceptPoSystemPo iamOrgInfo) { + SendPoSystemPo sendPoSystemPo = new SendPoSystemPo(); return sendPoSystemPo; } @PostMapping({"/OrgUpdateService"}) - public SendPoSystemPo OrgUpdateService(@RequestBody AcceptPoSystemPo iamOrgInfo) { - SendPoSystemPo sendPoSystemPo = new SendPoSystemPo<>(); + public SendPoSystemPo OrgUpdateService(@RequestBody AcceptPoSystemPo iamOrgInfo) { + SendPoSystemPo sendPoSystemPo = new SendPoSystemPo(); return sendPoSystemPo; } @PostMapping({"/OrgDeleteService"}) - public SendPoSystemPo OrgDeleteService(@RequestBody AcceptPoSystemPo iamOrgInfo) { - SendPoSystemPo sendPoSystemPo = new SendPoSystemPo<>(); + public SendPoSystemPo OrgDeleteService(@RequestBody AcceptPoSystemPo iamOrgInfo) { + SendPoSystemPo sendPoSystemPo = new SendPoSystemPo(); return sendPoSystemPo; } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamOrgAcceptDto.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamOrgAcceptDto.java index 479549f8..7a614478 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamOrgAcceptDto.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/IamOrgAcceptDto.java @@ -16,6 +16,7 @@ public class IamOrgAcceptDto extends IamCommonAcceptDto { /** * 机构编码.全集团唯一,不可重复,撤销后不可重新启用 */ + private String srmsOrgCode; /** diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/response/IamSchemaResponse.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/response/IamSchemaResponse.java index c3cdfae3..e8e95a43 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/response/IamSchemaResponse.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/dto/response/IamSchemaResponse.java @@ -8,7 +8,7 @@ import java.util.List; * Schema映射的响应体 */ @Data -public class IamSchemaResponse extends IamCommonResponseDto{ +public class IamSchemaResponse { /** * 请求id,收到什么就返回什么 diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/exception/IamGlobalException.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/exception/IamGlobalException.java new file mode 100644 index 00000000..38f2785c --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/exception/IamGlobalException.java @@ -0,0 +1,27 @@ +package com.jero.modules.docking.iam.exception; + +import com.jero.common.util.MessageUtils; + +public class IamGlobalException extends RuntimeException { + + private String bimRequestId; + private String message; + + private static final long serialVersionUID = 3634632351214L; + + public IamGlobalException(String bimRequestId, String message){ + super(message); + this.bimRequestId = bimRequestId; + this.message = message; + } + + public String getBimRequestId() { + return bimRequestId; + } + + @Override + public String getMessage() { + return message; + } + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/exception/IamGlobalExceptionHandler.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/exception/IamGlobalExceptionHandler.java new file mode 100644 index 00000000..0b5b51d3 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/exception/IamGlobalExceptionHandler.java @@ -0,0 +1,39 @@ +package com.jero.modules.docking.iam.exception; + +import com.jero.common.api.vo.Result; +import com.jero.common.exception.JeroBootException; +import com.jero.modules.docking.iam.dto.response.IamCommonResponseDto; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.apache.shiro.authz.AuthorizationException; +import org.apache.shiro.authz.UnauthorizedException; +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.data.redis.connection.PoolException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.multipart.MaxUploadSizeExceededException; +import org.springframework.web.servlet.NoHandlerFoundException; + +/** + * IAM对接全局异常处理器 + */ +@RestControllerAdvice +@Slf4j +public class IamGlobalExceptionHandler { + + /** + * 处理自定义异常 + */ + @ExceptionHandler(IamGlobalException.class) + public IamCommonResponseDto handleJeroBootException(IamGlobalException e){ + IamCommonResponseDto iamCommonResponseDto = new IamCommonResponseDto(); + iamCommonResponseDto.setBimRequestId(e.getBimRequestId()); + iamCommonResponseDto.setResultCode("-1"); // 错误码统一为-1 + iamCommonResponseDto.setMessage(e.getMessage()); + + return iamCommonResponseDto; + } + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/AcceptPoSystemPo.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/AcceptPoSystemPo.java index 52548084..6e5874a5 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/AcceptPoSystemPo.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/AcceptPoSystemPo.java @@ -13,6 +13,6 @@ public class AcceptPoSystemPo { private MessageHeader messageHeader; @JsonProperty("Tables") - private MessageTabels messageTabels; + private MessageTabels messageTabels; } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/MessageTabels.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/MessageTabels.java index 250d8f1d..0075096a 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/MessageTabels.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/MessageTabels.java @@ -7,9 +7,9 @@ import lombok.Data; * PO系统交互必须的实体,包含接口传递的正式数据(仅为套的一层壳) */ @Data -public class MessageTabels { +public class MessageTabels { @JsonProperty("Header") - private T header; + private MessageTabelsHeader header; } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/MessageTabelsHeader.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/MessageTabelsHeader.java new file mode 100644 index 00000000..079aa03a --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/MessageTabelsHeader.java @@ -0,0 +1,15 @@ +package com.jero.modules.docking.iam.po; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * 接受数据的tables中的header层 + */ +@Data +public class MessageTabelsHeader { + + @JsonProperty("data") + private String data; + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/SendPoSystemPo.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/SendPoSystemPo.java index e1daea97..d8860bac 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/SendPoSystemPo.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/SendPoSystemPo.java @@ -7,12 +7,12 @@ import lombok.Data; * 和PO系统做数据交互的最外层壳,做数据发送用 */ @Data -public class SendPoSystemPo { +public class SendPoSystemPo { @JsonProperty("MessageHeader") private MessageHeader messageHeader; @JsonProperty("Returns") - private T returns; + private SendReturnsPo returns; } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/SendReturnsPo.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/SendReturnsPo.java new file mode 100644 index 00000000..d12463ec --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/po/SendReturnsPo.java @@ -0,0 +1,19 @@ +package com.jero.modules.docking.iam.po; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * 返回数据的Return层 + */ +@Data +public class SendReturnsPo { + + @JsonProperty("data") + private String data; + + public SendReturnsPo(String data){ + this.data = data; + } + +} 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 new file mode 100644 index 00000000..40c22ced --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/iam/service/SyncIamService.java @@ -0,0 +1,142 @@ +package com.jero.modules.docking.iam.service; + +import com.bamboocloud.codec.BamboocloudFacade; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jero.common.aspect.annotation.Translation; +import com.jero.common.util.DateUtils; +import com.jero.common.util.UUIDGenerator; +import com.jero.modules.docking.iam.annotation.IamProperty; +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.IamSchemaResponse; +import com.jero.modules.docking.iam.dto.response.SchemaResponseInner; +import com.jero.modules.docking.iam.exception.IamGlobalException; +import com.jero.modules.docking.iam.po.MessageHeader; +import com.jero.modules.docking.iam.po.SendPoSystemPo; +import com.jero.modules.docking.iam.po.SendReturnsPo; +import com.jero.modules.docking.utils.DockingConstant; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * IAM对接业务处理类 + */ +@Service +@Transactional +public class SyncIamService { + + @Value("${iam.bimRemoteUser}") + private String bimRemoteUser; + + @Value("${iam.bimRemotePwd}") + private String bimRemotePwd; + + /** + * 校验IAM调用时的账号密码是否正确 + * 校验通过了正常走后续,不通过直接返回 + * @return + */ + public void validateUserAndPwd(IamCommonAcceptDto commonAcceptDto) { + if (!bimRemoteUser.equals(commonAcceptDto.getBimRemoteUser()) + || !bimRemotePwd.equals(commonAcceptDto.getBimRemotePwd())){ + throw new IamGlobalException(commonAcceptDto.getBimRequestId(), "用户名或密码不对,无法调用接口"); + } + } + + /** + * 生成Schema的信息 + * @return + */ + public IamSchemaResponse getSchemaInfo(IamCommonAcceptDto commonAcceptDto){ + // 获取用户同步的字段 + List accountFiledList = new ArrayList<>(); + Field[] userFields = IamUserAcceptDto.class.getDeclaredFields(); + this.extractedFieldProperty(accountFiledList, userFields); + + // 获取组织机构同步的字段 + List orgFiledList = new ArrayList<>(); + Field[] orgFields = IamOrgAcceptDto.class.getDeclaredFields(); + this.extractedFieldProperty(orgFiledList, orgFields); + + IamSchemaResponse iamSchemaResponse = new IamSchemaResponse(); + iamSchemaResponse.setAccount(accountFiledList); + iamSchemaResponse.setOrganization(orgFiledList); + iamSchemaResponse.setBimRequestId(commonAcceptDto.getBimRequestId()); + + + return iamSchemaResponse; + } + + /** + * 抽取含有IamProperty注解的字段元属性 + * @param filedList + * @param fields + */ + private void extractedFieldProperty(List filedList, Field[] fields) { + for (Field field : fields) { + if (field.isAnnotationPresent(IamProperty.class)) { + SchemaResponseInner schemaInfo = new SchemaResponseInner(); + + field.setAccessible(true); + + //获取Annotation对象 + IamProperty iamProperty = (IamProperty) field.getAnnotation(IamProperty.class); + //提取注解对象元数据 + boolean required = iamProperty.required(); + boolean multivalued = iamProperty.multivalued(); + String name = field.getName(); + String type = field.getType().getSimpleName(); + + schemaInfo.setName(name); + schemaInfo.setType(type); + schemaInfo.setRequired(required); + schemaInfo.setMultivalued(multivalued); + + filedList.add(schemaInfo); + } + } + } + + /** + * 处理统一响应PO层,并加密业务字段 + * @param acceptMessageHeader + * @param iamSchemaResponse + * @return + * @throws JsonProcessingException + */ + public SendPoSystemPo handlerGloablResponse(MessageHeader acceptMessageHeader, IamSchemaResponse iamSchemaResponse) throws JsonProcessingException { + SendPoSystemPo sendPoSystemPo = new SendPoSystemPo(); + + + 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")); + + ObjectMapper objectMapper = new ObjectMapper(); + String returnData = objectMapper.writeValueAsString(iamSchemaResponse); + // 加密PO层外的业务数据 + String encryptData = BamboocloudFacade.encrypt(returnData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE); + + sendPoSystemPo.setMessageHeader(sendMessageHeader); + sendPoSystemPo.setReturns(new SendReturnsPo(encryptData)); + + return sendPoSystemPo; + } + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/BamboocloudUtils.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/BamboocloudUtils.java new file mode 100644 index 00000000..d501e66e --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/BamboocloudUtils.java @@ -0,0 +1,84 @@ +package com.jero.modules.docking.utils;//package com.jero.modules.iam; + +import com.bamboocloud.codec.BamboocloudFacade; +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.util.Iterator; +import java.util.Map; +import java.util.TreeMap; +@Slf4j +public class BamboocloudUtils { + public static void main(String[] args) { + String aes = BamboocloudFacade.encrypt("{\"uid\":\"104\",\"bimRequestId\":\"95d73fe7aa7a4930a3edea779708a46c\",\"resultCode\":\"0\",\"message\":\"success\"}", "123456", "AES"); + System.out.println(aes); + String aes1 = getPlaintext("KJ3jbIflWkNiEq3oxE2d5oxtKRLO3CC7edGrq57RIB02RSRgPljiNcTfuWYLS3sc1tbZMLm5fWG2guLK100g9MkWH9NhlxorPSlcP8LaYuP5NeZ1wFP8iKqr5RredwXfDA3J1fjOCAJfzPvJ4HSb1w==", "123456", "AES"); + System.out.println(aes1); + } + public static boolean checkUsernamePassword(String username, String password) { + log.info("username --->" + username + " password --- >" + password + " ----ok"); + if("bbcadmin".equals(username)&&"P@ssw0rd".equals(password)) { + return true; + } + else { + return false; + } + } + + 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(); + verifymap.put(key, reqmap.get(key)); + } + Iterator ittree = verifymap.keySet().iterator(); + while (ittree.hasNext()) { + String key = (String) ittree.next(); + 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 BamboocloudFacade.verify(reqmap.get("signature").toString(), sb.toString(), type); + } + + public static String getRequestBody(HttpServletRequest request) { + BufferedReader br = null; + StringBuilder sb = new StringBuilder(); + String str = ""; + try { + br = request.getReader(); + while ((str = br.readLine()) != null) { + sb.append(str); + } + br.close(); + } catch (IOException e) { + e.printStackTrace(); + if (br != null) { + try { + br.close(); + } catch (IOException eo) { + eo.printStackTrace(); + } + } + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return sb.toString(); + } +} 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 new file mode 100644 index 00000000..c8da8f3c --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/DockingConstant.java @@ -0,0 +1,28 @@ +package com.jero.modules.docking.utils; + +/** + * 常量类 + */ +public class DockingConstant { + + /** + * 本系统名称 + */ + public static String SYSTEM_NAME = "SRMS"; + + /** + * IAM系统名称 + */ + public static String IAM_SYSTEM_NAME = "IAM"; + + /** + * IAM对称加密算法 + */ + public static String IAM_ENCRYPT_TYPE = "AES"; + + /** + * IAM对称加密密钥 + */ + public static String IAM_ENCRYPT_SECRET = "123456"; + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/SHA256Util.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/SHA256Util.java new file mode 100644 index 00000000..477f67c0 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/utils/SHA256Util.java @@ -0,0 +1,44 @@ +package com.jero.modules.docking.utils; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class SHA256Util { + public static void main(String[] args) { + String sha256StrJava = getSHA256StrJava("123456"); + System.out.println(sha256StrJava); + } + /** + * 利用java原生的摘要实现SHA256加密密后的报文 + */ + public static String getSHA256StrJava(String str) { + MessageDigest messageDigest; + String encodeStr = ""; + try { + messageDigest = MessageDigest.getInstance("SHA-256"); + messageDigest.update(str.getBytes(StandardCharsets.UTF_8)); + encodeStr = byte2Hex(messageDigest.digest()); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return encodeStr; + } + + /** + * 将byte转为16进制 + */ + private static String byte2Hex(byte[] bytes) { + StringBuilder stringBuffer = new StringBuilder(); + String temp; + for (byte aByte : bytes) { + temp = Integer.toHexString(aByte & 0xFF); + if (temp.length() == 1) { + //1得到一位的进行补0操作 + stringBuffer.append("0"); + } + stringBuffer.append(temp); + } + return stringBuffer.toString(); + } +} diff --git a/laws-single-startup/src/main/resources/application-dev.yml b/laws-single-startup/src/main/resources/application-dev.yml index 6613b8b4..2b52fe1f 100644 --- a/laws-single-startup/src/main/resources/application-dev.yml +++ b/laws-single-startup/src/main/resources/application-dev.yml @@ -358,33 +358,6 @@ justauth: type: default prefix: 'demo::' timeout: 1h -# 云端OCR识别集成配置参数 -OCR: - #请求OCR转换接口 - # handleFileUrl: https://sws.trans-cosmos.com.cn/WebService.asmx/FileConversion - handleFileUrl: http://61.136.1.103:8091/WebService.asmx/FileConversion - # OCR回调接口地址 配置客户本地的IP及端口号 - # callBackUrl: http://139.9.235.66:9110//api/ocr/OCRRestful/OcrHandleResult - callBackUrl: http://139.9.235.66:9022/local-tool/ocr/ocrHandleResult - # OCR认证用户 - userId: dayuzhou1234 - # OCR认证编码 - authCode: 123456 - # OCR接口公钥 - publicKey: EC4KKA6ZDTCPAOCRBC5M - # OCR文件存储路径 - ocrPath: /ocrFiles/ - #ocrPath: /data/DeploymentPackage/laws-shanqi/APPSOFT/LAWSOCRDEMO/OCRFILE/ - # OCR文件下载地址(onlyoffice专用) - ocrDownPath: http://10.0.1.25:8080/jero-boot/ocr/ocrCheck/downFile - # OCR文件保存地址(onlyoffice专用) - ocrSavePath: http://10.0.1.25:8080/jero-boot/ocr/ocrCheck/saveFile - # OCR文件编辑失败返回列表页(onlyoffice专用) - serverUrl: http://10.0.1.25:3000/docManage/ocr - # OCR接口超时时间 - times: 20 - # OCR转换类型 - convertType: BOTH file: downloadUrl: a @@ -392,3 +365,7 @@ file: path: D://opt//onlyoffice//file//splitImage/ sourceFilePath: D://opt//onlyoffice//sourceFile//DOCX.docx path: D://opt//onlyoffice//file// + +iam: + bimRemoteUser: srmsIam + bimRemotePwd: srmsIam2023 \ No newline at end of file diff --git a/laws-single-startup/src/main/resources/application-prod.yml b/laws-single-startup/src/main/resources/application-prod.yml index 677eedf9..1d3e0691 100644 --- a/laws-single-startup/src/main/resources/application-prod.yml +++ b/laws-single-startup/src/main/resources/application-prod.yml @@ -335,33 +335,6 @@ justauth: type: default prefix: 'demo::' timeout: 1h -# 云端OCR识别集成配置参数 -OCR: - #请求OCR转换接口 - # handleFileUrl: https://sws.trans-cosmos.com.cn/WebService.asmx/FileConversion - handleFileUrl: http://61.136.1.103:8091/WebService.asmx/FileConversion - # OCR回调接口地址 配置客户本地的IP及端口号 - # callBackUrl: http://139.9.235.66:9110//api/ocr/OCRRestful/OcrHandleResult - callBackUrl: http://139.9.235.66:9022/local-tool/ocr/ocrHandleResult - # OCR认证用户 - userId: dayuzhou1234 - # OCR认证编码 - authCode: 123456 - # OCR接口公钥 - publicKey: EC4KKA6ZDTCPAOCRBC5M - # OCR文件存储路径 - ocrPath: /ocrFiles/ - #ocrPath: /data/DeploymentPackage/laws-shanqi/APPSOFT/LAWSOCRDEMO/OCRFILE/ - # OCR文件下载地址(onlyoffice专用) - ocrDownPath: http://10.0.1.25:8080/jero-boot/ocr/ocrCheck/downFile - # OCR文件保存地址(onlyoffice专用) - ocrSavePath: http://10.0.1.25:8080/jero-boot/ocr/ocrCheck/saveFile - # OCR文件编辑失败返回列表页(onlyoffice专用) - serverUrl: http://10.0.1.25:3000/docManage/ocr - # OCR接口超时时间 - times: 20 - # OCR转换类型 - convertType: BOTH file: downloadUrl: a