package com.zy.system.entity.license; 
 | 
  
 | 
import com.core.common.Cools; 
 | 
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.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; 
 | 
    @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() { 
 | 
        if(!Cools.isEmpty(licensePath)){ 
 | 
            logger.info("++++++++ 开始加载许可证 ++++++++"); 
 | 
  
 | 
            try { 
 | 
                licenseTimer.getRemoteLicense(); 
 | 
            } catch (Exception e) { 
 | 
            } 
 | 
  
 | 
            try { 
 | 
                LicenseVerifyParam param = new LicenseVerifyParam(); 
 | 
                param.setSubject(subject); 
 | 
                param.setPublicAlias(publicAlias); 
 | 
                param.setStorePass(storePass); 
 | 
                param.setLicensePath(licensePath); 
 | 
                param.setPublicKeysStorePath(publicKeysStorePath); 
 | 
  
 | 
                LicenseVerify licenseVerify = new LicenseVerify(); 
 | 
  
 | 
                LicenseInfos latestLicense = licenseInfosService.getLatestLicense(); 
 | 
                if (latestLicense == null) { 
 | 
                    logger.info("许可证不存在"); 
 | 
                    return false; 
 | 
                } 
 | 
  
 | 
                //安装证书 
 | 
                LicenseContent install = licenseVerify.install(param, latestLicense.getLicense()); 
 | 
  
 | 
                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) { 
 | 
                e.printStackTrace(); 
 | 
                return false; 
 | 
            } 
 | 
        } 
 | 
        licenseTimer.setSystemSupport(false); 
 | 
        return false; 
 | 
    } 
 | 
} 
 |