package com.zy.system.entity.license;
|
|
import com.core.common.Cools;
|
import com.zy.system.timer.LicenseTimer;
|
import de.schlichtherle.license.LicenseContent;
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationListener;
|
import org.springframework.context.event.ContextRefreshedEvent;
|
import org.springframework.stereotype.Component;
|
|
import java.io.File;
|
import java.util.Date;
|
|
/**
|
* 在项目启动时安装证书
|
*/
|
@Component
|
public class LicenseCheckListener implements ApplicationListener<ContextRefreshedEvent> {
|
private static Logger logger = LogManager.getLogger(LicenseCheckListener.class);
|
|
/**
|
* 证书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 LicenseTimer licenseTimer;
|
|
@Override
|
public void onApplicationEvent(ContextRefreshedEvent event) {
|
//root application context 没有parent
|
ApplicationContext context = event.getApplicationContext().getParent();
|
if(context == null){
|
loadLicense();
|
}
|
}
|
|
//加载证书
|
public boolean loadLicense() {
|
if(!Cools.isEmpty(licensePath)){
|
logger.info("++++++++ 开始加载许可证 ++++++++");
|
|
try {
|
// String publicKeysStoreFileName = this.getClass().getClassLoader().getResource(publicKeysStorePath).getPath();
|
// File publicKeysStoreFile = new File(publicKeysStoreFileName);
|
//
|
// String licensePathFileName = this.getClass().getClassLoader().getResource(licensePath).getPath();
|
// File licensePathFile = new File(licensePathFileName);
|
|
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);
|
|
logger.info("++++++++ 许可证加载结束 ++++++++");
|
|
licenseTimer.setSystemSupport(install!=null);
|
|
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);
|
licenseTimer.setLicenseDays(day);
|
}
|
|
|
return install != null;
|
} catch (Exception e) {
|
return false;
|
}
|
}
|
licenseTimer.setSystemSupport(false);
|
return false;
|
}
|
}
|