package com.zy.system.entity.license; import com.zy.system.entity.LicenseInfos; import com.zy.system.service.LicenseInfosService; 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.util.Date; /** * 在项目启动时安装证书 */ @Component public class LicenseCheckListener implements ApplicationListener { 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.publicKeysStorePath}") private String publicKeysStorePath; @Autowired private LicenseTimer licenseTimer; @Autowired private LicenseInfosService licenseInfosService; @Override public void onApplicationEvent(ContextRefreshedEvent event) { //root application context 没有parent ApplicationContext context = event.getApplicationContext().getParent(); if(context == null){ loadLicense(); } } //加载证书 public boolean loadLicense() { return loadLicense(true); } public boolean loadLicense(boolean fetchRemote) { logger.info("++++++++ 开始加载许可证 ++++++++"); if (fetchRemote) { try { licenseTimer.getRemoteLicense(); } catch (Exception ignored) { } } try { LicenseVerifyParam param = new LicenseVerifyParam(); param.setSubject(subject); param.setPublicAlias(publicAlias); param.setStorePass(storePass); param.setPublicKeysStorePath(publicKeysStorePath); LicenseVerify licenseVerify = new LicenseVerify(); String requestCode = LicenseUtils.buildRequestCode(subject); LicenseInfos latestLicense = licenseInfosService.getLatestLicenseByRequestCode(requestCode); LicenseContent install = null; if (latestLicense != null && latestLicense.getLicense() != null && !latestLicense.getLicense().trim().isEmpty()) { install = licenseVerify.install(param, latestLicense.getLicense().trim()); } if (install == null) { logger.info("许可证不存在"); licenseTimer.setSystemSupport(false); licenseTimer.setLicenseDays(0); return false; } logger.info("++++++++ 许可证加载结束 ++++++++"); licenseTimer.setSystemSupport(true); 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 true; } catch (Exception e) { logger.error("许可证加载失败", e); licenseTimer.setSystemSupport(false); licenseTimer.setLicenseDays(0); return false; } } }