package com.zy.system.timer;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.core.common.Cools;
|
import com.zy.common.utils.HttpHandler;
|
import com.zy.system.entity.LicenseInfos;
|
import com.zy.system.entity.license.*;
|
import com.zy.system.service.LicenseInfosService;
|
import de.schlichtherle.license.LicenseContent;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import java.util.Date;
|
import java.util.HashMap;
|
|
@Component
|
public class LicenseTimer {
|
|
private static boolean SYSTEM_SUPPORT = false;//系统激活状态,默认关闭
|
|
private static int LICENSE_DAYS = 0;//许可证天数
|
|
/**
|
* 证书subject
|
*/
|
@Value("${license.subject}")
|
private String subject;
|
|
/**
|
* 公钥别称
|
*/
|
@Value("${license.publicAlias}")
|
private String publicAlias;
|
|
/**
|
* 访问公钥库的密码
|
*/
|
@Value("${license.storePass}")
|
private String storePass;
|
|
/**
|
* 证书生成路径
|
*/
|
@Value("${license.licensePath}")
|
private String licensePath;
|
|
/**
|
* 密钥库存储路径
|
*/
|
@Value("${license.publicKeysStorePath}")
|
private String publicKeysStorePath;
|
|
@Autowired
|
private LicenseInfosService licenseInfosService;
|
|
//每天晚上11点更新系统激活状态
|
@Scheduled(cron = "0 0 23 * * ? ")
|
public void timer() {
|
try {
|
getRemoteLicense();
|
} catch (Exception e) {
|
|
}
|
|
try {
|
verify();
|
} catch (Exception e) {
|
|
}
|
}
|
|
public void getRemoteLicense() {
|
try {
|
AbstractServerInfos abstractServerInfos = null;
|
String osName = System.getProperty("os.name");
|
//根据不同操作系统类型选择不同的数据获取方法
|
if (osName.startsWith("windows")) {
|
abstractServerInfos = new WindowsServerInfos();
|
} else if (osName.startsWith("linux")) {
|
abstractServerInfos = new LinuxServerInfos();
|
}else{//其他服务器类型
|
abstractServerInfos = new WindowsServerInfos();
|
}
|
LicenseCheck serverInfos = abstractServerInfos.getServerInfos();
|
|
HashMap<String, Object> map = new HashMap<>();
|
map.put("subject", subject);
|
map.put("licenseCheck", serverInfos);
|
|
String response = new HttpHandler.Builder()
|
.setUri("http://net.zoneyung.net:9999/license")
|
.setPath("/remoteQueryLicense")
|
.setJson(JSON.toJSONString(map))
|
.build()
|
.doPost();
|
JSONObject jsonObject = JSON.parseObject(response);
|
if (jsonObject.getString("result").equals("ok")) {
|
LicenseInfos licenseInfos = new LicenseInfos();
|
licenseInfos.setLicense(jsonObject.getString("data"));
|
licenseInfos.setCreateTime(new Date());
|
licenseInfos.setLicenseTime(jsonObject.getString("licenseTime"));
|
licenseInfosService.insert(licenseInfos);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public void verify() {
|
LicenseInfos latestLicense = licenseInfosService.getLatestLicense();
|
if (latestLicense == null) {
|
setLicenseDays(0);
|
setSystemSupport(false);
|
return;
|
}
|
|
LicenseVerifyParam param = new LicenseVerifyParam();
|
param.setSubject(subject);
|
param.setPublicAlias(publicAlias);
|
param.setStorePass(storePass);
|
param.setLicensePath(licensePath);
|
param.setPublicKeysStorePath(publicKeysStorePath);
|
|
//验证许可证是否有效
|
LicenseVerify licenseVerify = new LicenseVerify();
|
//安装证书
|
LicenseContent install = licenseVerify.install(param, latestLicense.getLicense());
|
|
if (install != null) {
|
Date start = new Date();
|
Date end = install.getNotAfter();
|
Long starTime = start.getTime();
|
Long endTime = end.getTime();
|
long num = endTime - starTime;//时间戳相差的毫秒数
|
int day = (int) (num / 24 / 60 / 60 / 1000);
|
setLicenseDays(day);
|
setSystemSupport(true);
|
}else {
|
setLicenseDays(0);
|
setSystemSupport(false);
|
}
|
}
|
|
public boolean getSystemSupport() {
|
return SYSTEM_SUPPORT;
|
}
|
|
public void setSystemSupport(boolean systemSupport) {
|
SYSTEM_SUPPORT = systemSupport;
|
}
|
|
public int getLicenseDays() {
|
return LICENSE_DAYS;
|
}
|
|
public void setLicenseDays(int licenseDays) {
|
LICENSE_DAYS = licenseDays;
|
}
|
|
}
|