智能仲裁后端服务

EsignHttpHelper.java 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package com.ruoyi.common.utils;
  2. import com.ruoyi.common.constant.EsignEncryption;
  3. import com.ruoyi.common.constant.EsignHeaderConstant;
  4. import com.ruoyi.common.constant.EsignHttpCfgHelper;
  5. import com.ruoyi.common.core.domain.entity.EsignCoreSdkInfo;
  6. import com.ruoyi.common.core.domain.entity.EsignHttpResponse;
  7. import com.ruoyi.common.enums.EsignRequestType;
  8. import com.ruoyi.common.exception.EsignDemoException;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import java.util.HashMap;
  12. import java.util.Map;
  13. /**
  14. * @description Http 请求 辅助类
  15. * @author 澄泓
  16. * @since JDK1.7
  17. */
  18. public class EsignHttpHelper {
  19. private static final Logger LOGGER = LoggerFactory.getLogger(EsignHttpHelper.class);
  20. /**
  21. * 不允许外部创建实例
  22. */
  23. private EsignHttpHelper() {
  24. }
  25. /**
  26. * @description 发送常规HTTP 请求
  27. *
  28. * @param reqType 请求方式
  29. * @param url 请求路径
  30. * @param paramStr 请求参数
  31. * @return
  32. * @throws EsignDemoException
  33. * @author 澄泓
  34. */
  35. public static EsignHttpResponse doCommHttp(String host, String url, EsignRequestType reqType, Object paramStr , Map<String,String> httpHeader, boolean debug) throws EsignDemoException {
  36. return EsignHttpCfgHelper.sendHttp(reqType, host+url,httpHeader, paramStr, debug);
  37. }
  38. /**
  39. * @description 发送文件流上传 HTTP 请求
  40. *
  41. * @param reqType 请求方式
  42. * @param uploadUrl 请求路径
  43. * @param param 请求参数
  44. * @param fileContentMd5 文件fileContentMd5
  45. * @param contentType 文件MIME类型
  46. * @return
  47. * @throws EsignDemoException
  48. * @author 澄泓
  49. */
  50. public static EsignHttpResponse doUploadHttp( String uploadUrl,EsignRequestType reqType,byte[] param, String fileContentMd5,
  51. String contentType, boolean debug) throws EsignDemoException {
  52. Map<String, String> uploadHeader = buildUploadHeader(fileContentMd5, contentType);
  53. if(debug){
  54. LOGGER.info("----------------------------start------------------------");
  55. LOGGER.info("fileContentMd5:{}",fileContentMd5);
  56. LOGGER.info("contentType:{}",contentType);
  57. }
  58. return EsignHttpCfgHelper.sendHttp(reqType,uploadUrl, uploadHeader, param,debug);
  59. }
  60. /**
  61. * @description 构建一个签名鉴权+json数据的esign请求头
  62. * @return
  63. * @author 澄泓
  64. */
  65. public static Map<String, String> buildSignAndJsonHeader(String projectId,String contentMD5,String accept,String contentType,String authMode) {
  66. Map<String, String> header = new HashMap<>();
  67. header.put("X-Tsign-Open-App-Id", projectId);
  68. header.put("X-Tsign-Open-Version-Sdk",EsignCoreSdkInfo.getSdkVersion());
  69. header.put("X-Tsign-Open-Ca-Timestamp", EsignEncryption.timeStamp());
  70. header.put("Accept",accept);
  71. header.put("Content-MD5",contentMD5);
  72. header.put("Content-Type", contentType);
  73. header.put("X-Tsign-Open-Auth-Mode", authMode);
  74. return header;
  75. }
  76. /**
  77. * 签名计算并且构建一个签名鉴权+json数据的esign请求头
  78. * @param httpMethod
  79. * * The name of a supported {@linkplain java.nio.charset.Charset
  80. * * charset}
  81. * @return
  82. */
  83. public static Map<String,String> signAndBuildSignAndJsonHeader(String projectId, String secret,String paramStr,String httpMethod,String url,boolean debug) throws EsignDemoException {
  84. String contentMD5="";
  85. //统一转大写处理
  86. httpMethod = httpMethod.toUpperCase();
  87. if("GET".equals(httpMethod)||"DELETE".equals(httpMethod)){
  88. paramStr=null;
  89. contentMD5="";
  90. } else if("PUT".equals(httpMethod)||"POST".equals(httpMethod)){
  91. //对body体做md5摘要
  92. contentMD5= EsignEncryption.doContentMD5(paramStr);
  93. }else{
  94. throw new EsignDemoException(String.format("不支持的请求方法%s",httpMethod));
  95. }
  96. //构造一个初步的请求头
  97. Map<String, String> esignHeaderMap = buildSignAndJsonHeader(projectId, contentMD5, EsignHeaderConstant.ACCEPT.VALUE(), EsignHeaderConstant.CONTENTTYPE_JSON.VALUE(), EsignHeaderConstant.AUTHMODE.VALUE());
  98. //排序
  99. url=EsignEncryption.sortApiUrl(url);
  100. //传入生成的bodyMd5,加上其他请求头部信息拼接成字符串
  101. String message = EsignEncryption.appendSignDataString(httpMethod, esignHeaderMap.get("Content-MD5"),esignHeaderMap.get("Accept"),esignHeaderMap.get("Content-Type"),esignHeaderMap.get("Headers"),esignHeaderMap.get("Date"), url);
  102. //整体做sha256签名
  103. String reqSignature = EsignEncryption.doSignatureBase64(message, secret);
  104. //请求头添加签名值
  105. esignHeaderMap.put("X-Tsign-Open-Ca-Signature",reqSignature);
  106. if(debug){
  107. LOGGER.info("----------------------------start------------------------");
  108. LOGGER.info("待计算body值:{}", paramStr+"\n");
  109. LOGGER.info("MD5值:{}",contentMD5+"\n");
  110. LOGGER.info("待签名字符串:{}",message+"\n");
  111. LOGGER.info("签名值:{}",reqSignature+"\n");
  112. }
  113. return esignHeaderMap;
  114. }
  115. /**
  116. * @description 构建一个Token鉴权+jsons数据的esign请求头
  117. * @return
  118. * @author 澄泓
  119. */
  120. public static Map<String, String> buildTokenAndJsonHeader(String appid,String token) {
  121. Map<String, String> esignHeader = new HashMap<>();
  122. esignHeader.put("X-Tsign-Open-Version-Sdk", EsignCoreSdkInfo.getSdkVersion());
  123. esignHeader.put("Content-Type", EsignHeaderConstant.CONTENTTYPE_JSON.VALUE());
  124. esignHeader.put("X-Tsign-Open-App-Id", appid);
  125. esignHeader.put("X-Tsign-Open-Token", token);
  126. return esignHeader;
  127. }
  128. /**
  129. * @description 构建一个form表单数据的esign请求头
  130. * @return
  131. * @author 澄泓
  132. */
  133. public static Map<String, String> buildFormDataHeader(String appid) {
  134. Map<String, String> esignHeader = new HashMap<>();
  135. esignHeader.put("X-Tsign-Open-Version-Sdk",EsignCoreSdkInfo.getSdkVersion());
  136. esignHeader.put("X-Tsign-Open-Authorization-Version","v2");
  137. esignHeader.put("Content-Type", EsignHeaderConstant.CONTENTTYPE_FORMDATA.VALUE());
  138. esignHeader.put("X-Tsign-Open-App-Id", appid);
  139. return esignHeader;
  140. }
  141. /**
  142. * @description 创建文件流上传 请求头
  143. *
  144. * @param fileContentMd5
  145. * @param contentType
  146. * @return
  147. * @author 澄泓
  148. */
  149. public static Map<String, String> buildUploadHeader(String fileContentMd5, String contentType) {
  150. Map<String, String> header = new HashMap<>();
  151. header.put("Content-MD5", fileContentMd5);
  152. header.put("Content-Type", contentType);
  153. return header;
  154. }
  155. // ------------------------------私有方法end----------------------------------------------
  156. }