AuthorizeApprove.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. package com.genersoft.iot.vmp.conf;
  2. import com.alibaba.fastjson2.JSON;
  3. import com.genersoft.iot.vmp.utils.DateUtil;
  4. import net.roseboy.classfinal.util.IoUtils;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. import org.springframework.util.Base64Utils;
  8. import java.io.File;
  9. public class AuthorizeApprove {
  10. // 机器码
  11. private String machineCode;
  12. // 加密后的授权数据
  13. private String encryptAuthorData;
  14. // 请求生成时间
  15. private String requestTime;
  16. // 批准生成时间
  17. private String approveTime;
  18. // 批准人
  19. private String approver;
  20. // 授权天数
  21. private int authorizeDay;
  22. public final static String baseAuthorizeApproveFilePath = "authorize/authorizeApprove.hfy";
  23. private final static Logger logger = LoggerFactory.getLogger(AuthorizeApprove.class);
  24. // 读取授权文件
  25. private static byte[] readAuthorizeApproveFile(String path) {
  26. if(path == null) {
  27. path = baseAuthorizeApproveFilePath;
  28. }
  29. // logger.info("path: {}", path);
  30. File file = new File(path);
  31. if(!file.exists()) {
  32. logger.error("无法解析授权请求文件");
  33. return null;
  34. }
  35. byte[] data = IoUtils.readFileToByte(file);
  36. // 解析授权文件
  37. return data;
  38. }
  39. public static String getApprovePasswd(AuthorData authorData, String machineCode) {
  40. return authorData.getPassword() + machineCode + authorData.getAuthorizeTime();
  41. }
  42. // 加密并保存授权批准文件
  43. public static boolean saveAuthorizeApproveFile(AuthorizeApprove authorizeApprove,AuthorData authorData, String targetPath) {
  44. if (authorizeApprove == null) {
  45. logger.error("授权批准文件为空, 无法保存");
  46. return false;
  47. }
  48. if (targetPath == null) {
  49. logger.error("请输入授权文件保存路径");
  50. return false;
  51. }
  52. // 生成授权批准文件
  53. String approveStr = JSON.toJSONString(authorizeApprove);
  54. String password = getApprovePasswd(authorData, authorData.getMachineCode());
  55. try{
  56. // 加密授权文件
  57. String encryptStr = AesUtils.encrypt(approveStr, password);
  58. // 使用 base64 转换文本
  59. byte[] approveData = encryptStr.getBytes();
  60. byte[] approveByte = Base64Utils.encode(approveData);
  61. // 保存授权文件
  62. File file = new File(targetPath);
  63. if (file.exists()) {
  64. file.delete();
  65. logger.info("授权批准文件已存在, 正在覆盖");
  66. }
  67. file.createNewFile();
  68. IoUtils.writeTxtFile(file, approveByte.toString());
  69. return true;
  70. }catch(Exception e)
  71. {
  72. logger.error("授权批准文件生成失败. 请检查练习管理员进行排查. ");
  73. logger.error("错误信息: {}", e.getMessage());
  74. return false;
  75. }
  76. }
  77. // 生成授权文件
  78. public static AuthorizeApprove generateAuthorizeApprove(String machineCode, String authorizeFilePath, String approver, int p_authorizeDay ) {
  79. // 获取密文
  80. String encryptAuthorData = Authorize.getEncryptAuthorData(authorizeFilePath);
  81. // 读取授权文件
  82. AuthorData authorData = Authorize.parseBaseAuthorizeFile(machineCode, authorizeFilePath);
  83. if (authorData == null) {
  84. logger.error("授权文件解析失败,请检查对应文件是否正确");
  85. return null;
  86. }
  87. // 判断机器码是否一致
  88. if (!authorData.getMachineCode().equals(machineCode)) {
  89. logger.error("授权文件机器码不一致,请检查对应文件是否正确");
  90. return null;
  91. }
  92. // 生成授权批准文件
  93. AuthorizeApprove authorizeApprove = new AuthorizeApprove();
  94. // 机器码
  95. authorizeApprove.setMachineCode(machineCode);
  96. // 授权请求时间
  97. authorizeApprove.setRequestTime(authorData.getAuthorizeTime());
  98. // 授权发布时间
  99. authorizeApprove.setRequestTime(DateUtil.getNowForISO8601());
  100. // 请求密文
  101. authorizeApprove.setEncryptAuthorData(encryptAuthorData);
  102. // 授权天数
  103. authorizeApprove.setAuthorizeDay(p_authorizeDay);
  104. // 批准人
  105. authorizeApprove.setApprover(approver);
  106. return authorizeApprove;
  107. }
  108. /**
  109. * 解析授权批准文件
  110. * @param machineCode 机器码
  111. * @param authorData 授权数据
  112. * @return
  113. */
  114. public static AuthorizeApprove parseAuthorizeApprove (String authorizeApproveFilePath, String machineCode, AuthorData authorData) {
  115. if (authorData == null) {
  116. logger.info("授权数据解析失败");
  117. return null;
  118. }
  119. authorizeApproveFilePath = authorizeApproveFilePath == null ? baseAuthorizeApproveFilePath : authorizeApproveFilePath;
  120. // 读取授权批准文件
  121. byte[] approveByte = readAuthorizeApproveFile(authorizeApproveFilePath);
  122. if (approveByte == null) {
  123. logger.info("授权批准文件读取失败,请检查对应文件是否正确");
  124. return null;
  125. }
  126. // 解析授权批准文件
  127. AuthorizeApprove authorizeApprove = null;
  128. // 使用 base64 转换文本
  129. byte[] approveData = Base64Utils.decode(approveByte);
  130. String code = new String(approveData);
  131. // 解密授权文件
  132. String password = getApprovePasswd(authorData, machineCode);
  133. try
  134. {
  135. String decryptStr = AesUtils.decrypt(code, password);
  136. authorizeApprove = JSON.parseObject(decryptStr, AuthorizeApprove.class);
  137. return authorizeApprove;
  138. }catch(Exception e)
  139. {
  140. logger.error("授权授权请求文件解析失败. 请检查练习管理员进行排查. ");
  141. logger.error("错误信息: {}", e.getMessage());
  142. return null;
  143. }
  144. }
  145. public String getMachineCode() {
  146. return machineCode;
  147. }
  148. public void setMachineCode(String machineCode) {
  149. this.machineCode = machineCode;
  150. }
  151. public String getEncryptAuthorData() {
  152. return encryptAuthorData;
  153. }
  154. public void setEncryptAuthorData(String encryptAuthorData) {
  155. this.encryptAuthorData = encryptAuthorData;
  156. }
  157. public String getRequestTime() {
  158. return requestTime;
  159. }
  160. public void setRequestTime(String requestTime) {
  161. this.requestTime = requestTime;
  162. }
  163. public String getApproveTime() {
  164. return approveTime;
  165. }
  166. public void setApproveTime(String approveTime) {
  167. this.approveTime = approveTime;
  168. }
  169. public String getApprover() {
  170. return approver;
  171. }
  172. public void setApprover(String approver) {
  173. this.approver = approver;
  174. }
  175. public int getAuthorizeDay() {
  176. return authorizeDay;
  177. }
  178. public void setAuthorizeDay(int authorizeDay) {
  179. this.authorizeDay = authorizeDay;
  180. }
  181. }