QmthUtil.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package cn.com.qmth.sdk.util;
  2. import java.io.UnsupportedEncodingException;
  3. import java.net.URLEncoder;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. /**
  7. * 启明泰和-接口安全工具
  8. *
  9. * @author WANGWEI
  10. * @date 2018年11月23日
  11. * @Copyright (c) 2018-2020 WANGWEI [QQ:522080330] All Rights Reserved.
  12. */
  13. public class QmthUtil {
  14. /**
  15. * 获取安全请求头信息
  16. *
  17. * @author WANGWEI
  18. * @return
  19. */
  20. public static Map<String, String> getSecurityHeaders() {
  21. long timestamp = System.currentTimeMillis();
  22. String rootOrgId = String.valueOf(getRootOrgId());
  23. String appId = PropertiesUtil.getString("qmth.appId");
  24. String secretKey = PropertiesUtil.getString("qmth.secretKey");
  25. StringBuilder sb = new StringBuilder();
  26. sb.append(rootOrgId).append(appId).append(timestamp).append(secretKey);
  27. byte[] bytes = SHA256.encode(sb.toString());
  28. String accessToken = ByteUtil.toHexAscii(bytes);
  29. Map<String, String> headers = new HashMap<String, String>();
  30. headers.put("rootOrgId", String.valueOf(rootOrgId));
  31. headers.put("timestamp", String.valueOf(timestamp));
  32. headers.put("appId", appId);
  33. headers.put("access_token", accessToken);
  34. return headers;
  35. }
  36. /**
  37. * 方法注释
  38. *
  39. * @author WANGWEI
  40. * @return
  41. */
  42. public static Long getRootOrgId() {
  43. Long rootOrgId = PropertiesUtil.getLong("qmth.rootOrgId", -1L);
  44. return rootOrgId;
  45. }
  46. /**
  47. * 方法注释
  48. *
  49. * @author WANGWEI
  50. * @param args
  51. */
  52. public static String buildCommonUserAccessUrl(String loginName) {
  53. String rootOrgId = String.valueOf(getRootOrgId());
  54. long timestamp = System.currentTimeMillis();
  55. String appId = PropertiesUtil.getString("qmth.appId");
  56. String secretKey = PropertiesUtil.getString("qmth.secretKey");
  57. String accessUrl = PropertiesUtil.getString("qmth.commonUserAccessUrl");
  58. StringBuilder sb = new StringBuilder();
  59. sb.append(loginName).append(rootOrgId).append(appId).append(timestamp).append(secretKey);
  60. byte[] bytes = SHA256.encode(sb.toString());
  61. String accessToken = ByteUtil.toHexAscii(bytes);
  62. StringBuilder params = new StringBuilder();
  63. params.append("loginName").append("=").append(urlEncode(loginName));
  64. params.append("&").append("orgId").append("=").append(rootOrgId);
  65. params.append("&").append("appId").append("=").append(appId);
  66. params.append("&").append("timestamp").append("=").append(timestamp);
  67. params.append("&").append("token").append("=").append(accessToken);
  68. return accessUrl + "?" + params.toString();
  69. }
  70. /**
  71. * 方法注释
  72. *
  73. * @author WANGWEI
  74. * @param args
  75. */
  76. public static String buildStudentAccessUrl(String accountType, String accountValue) {
  77. String rootOrgId = String.valueOf(getRootOrgId());
  78. long timestamp = System.currentTimeMillis();
  79. String appId = PropertiesUtil.getString("qmth.appId");
  80. String secretKey = PropertiesUtil.getString("qmth.secretKey");
  81. String accessUrl = PropertiesUtil.getString("qmth.studentAccessUrl");
  82. StringBuilder sb = new StringBuilder();
  83. sb.append(accountType).append(accountValue).append(rootOrgId).append(appId)
  84. .append(timestamp).append(secretKey);
  85. byte[] bytes = SHA256.encode(sb.toString());
  86. String accessToken = ByteUtil.toHexAscii(bytes);
  87. StringBuilder params = new StringBuilder();
  88. params.append("accountType").append("=").append(urlEncode(accountType));
  89. params.append("&").append("accountValue").append("=").append(urlEncode(accountValue));
  90. params.append("&").append("rootOrgId").append("=").append(rootOrgId);
  91. params.append("&").append("appId").append("=").append(appId);
  92. params.append("&").append("timestamp").append("=").append(timestamp);
  93. params.append("&").append("token").append("=").append(accessToken);
  94. return accessUrl + "?" + params.toString();
  95. }
  96. /**
  97. * 方法注释
  98. *
  99. * @author WANGWEI
  100. * @param s
  101. * @return
  102. */
  103. private static String urlEncode(String s) {
  104. try {
  105. return URLEncoder.encode(s, "UTF-8");
  106. } catch (UnsupportedEncodingException e) {
  107. throw new RuntimeException(e);
  108. }
  109. }
  110. /**
  111. * 构建URL
  112. *
  113. * @author WANGWEI
  114. * @param uri
  115. * @return
  116. */
  117. public static String buildUrl(String uri) {
  118. String host = PropertiesUtil.getString("qmth.server.host");
  119. String port = PropertiesUtil.getString("qmth.server.port");
  120. StringBuilder sb = new StringBuilder();
  121. sb.append("http://").append(host).append(":").append(port);
  122. if (!uri.startsWith("/")) {
  123. sb.append("/");
  124. }
  125. sb.append(uri);
  126. return sb.toString();
  127. }
  128. }