package com.se.system.service;
|
|
import com.se.system.domain.vo.LicenseResultVo;
|
import com.se.system.domain.vo.LicenseVerifyMg;
|
import com.se.system.domain.vo.LicenseVerifyParamVo;
|
import com.se.system.utils.CommonUtils;
|
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.FileNotFoundException;
|
import java.security.MessageDigest;
|
import java.security.NoSuchAlgorithmException;
|
import java.util.concurrent.Executors;
|
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.TimeUnit;
|
|
@SuppressWarnings("ALL")
|
public class LiceVerifyInstallListener {
|
public LicenseVerifyParamVo licenseVerifyProperties;
|
|
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
|
|
private ScheduledFuture<?> scheduledFuture;
|
|
// 启动定时任务
|
public void startTimer() {
|
scheduledFuture = scheduler.scheduleAtFixedRate(this::timer, 0, 15, TimeUnit.SECONDS);
|
}
|
|
// 停止定时任务
|
public void stopTimer() {
|
if (scheduledFuture != null) {
|
scheduledFuture.cancel(false);
|
}
|
}
|
|
/**
|
* 文件唯一身份标识 == 相当于人类的指纹一样
|
*/
|
private static String md5 = "";
|
|
private static boolean isLoad = false;
|
|
public static void LicenseVerifyInstall(LicenseVerifyParamVo licenseVerifyProperties) {
|
new LiceVerifyInstallListener(licenseVerifyProperties);
|
}
|
|
public LiceVerifyInstallListener(LicenseVerifyParamVo licenseVerifyProperties) {
|
// startTimer();
|
this.licenseVerifyProperties = licenseVerifyProperties;
|
if (CommonUtils.isNotEmpty(licenseVerifyProperties.getLicensePath())) {
|
install();
|
try {
|
String readMd5 = getMd5(licenseVerifyProperties.getLicensePath());
|
isLoad = true;
|
if (LiceVerifyInstallListener.md5 == null || "".equals(LiceVerifyInstallListener.md5)) {
|
LiceVerifyInstallListener.md5 = readMd5;
|
}
|
} catch (Exception e) {
|
|
}
|
}
|
}
|
|
/**
|
* 15秒检测一次,不能太快也不能太慢
|
*/
|
protected void timer() {
|
if (!isLoad) {
|
return;
|
}
|
String readMd5 = null;
|
try {
|
readMd5 = getMd5(licenseVerifyProperties.getLicensePath());
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
// 不相等,说明lic变化了
|
if (!readMd5.equals(LiceVerifyInstallListener.md5)) {
|
install();
|
LiceVerifyInstallListener.md5 = readMd5;
|
}
|
}
|
|
private void install() {
|
System.out.println("++++++++ 开始安装证书 ++++++++");
|
LicenseVerifyMg licenseVerifyManager = new LicenseVerifyMg();
|
/** 走定义校验证书并安装 */
|
LicenseResultVo result = licenseVerifyManager.install(licenseVerifyProperties.getVerifyParam());
|
if (result.getResult()) {
|
System.out.println("++++++++ 证书安装成功 ++++++++");
|
} else {
|
System.out.println("++++++++ 证书安装失败 ++++++++");
|
}
|
}
|
|
/**
|
* <p>获取文件的md5</p>
|
*/
|
public String getMd5(String filePath) throws Exception {
|
File file;
|
String md5 = "";
|
try {
|
file = new File(filePath);
|
if (file.exists()) {
|
FileInputStream is = new FileInputStream(file);
|
byte[] data = new byte[is.available()];
|
is.read(data);
|
md5 = calculateMD5(data);
|
is.close();
|
}
|
} catch (FileNotFoundException e) {
|
|
}
|
return md5;
|
}
|
|
public static String calculateMD5(byte[] data) {
|
try {
|
MessageDigest md = MessageDigest.getInstance("MD5");
|
byte[] hashBytes = md.digest(data);
|
|
StringBuilder hexString = new StringBuilder();
|
for (byte b : hashBytes) {
|
String hex = Integer.toHexString(0xff & b);
|
if (hex.length() == 1) {
|
hexString.append('0');
|
}
|
hexString.append(hex);
|
}
|
|
return hexString.toString();
|
} catch (NoSuchAlgorithmException e) {
|
e.printStackTrace(); // 处理异常,例如打印错误信息
|
return null;
|
}
|
}
|
}
|