package com.zy.system.entity.license; 
 | 
  
 | 
import com.core.common.Cools; 
 | 
import de.schlichtherle.license.LicenseContent; 
 | 
import org.apache.logging.log4j.LogManager; 
 | 
import org.apache.logging.log4j.Logger; 
 | 
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; 
 | 
  
 | 
/** 
 | 
 * 在项目启动时安装证书 
 | 
 */ 
 | 
@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; 
 | 
  
 | 
    @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(licensePathFile.getPath()); 
 | 
                param.setPublicKeysStorePath(publicKeysStoreFile.getPath()); 
 | 
  
 | 
                LicenseVerify licenseVerify = new LicenseVerify(); 
 | 
                //安装证书 
 | 
                LicenseContent install = licenseVerify.install(param); 
 | 
  
 | 
                logger.info("++++++++ 许可证加载结束 ++++++++"); 
 | 
  
 | 
                return install != null; 
 | 
            } catch (Exception e) { 
 | 
                return false; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return false; 
 | 
    } 
 | 
} 
 |