|  |  | 
 |  |  | package com.zy.asrs.wms.system.license; | 
 |  |  |  | 
 |  |  | import com.zy.asrs.framework.common.Cools; | 
 |  |  | import com.zy.asrs.wms.system.license.entity.license.LicenseVerify; | 
 |  |  | import com.zy.asrs.wms.system.license.entity.license.LicenseVerifyParam; | 
 |  |  | import com.zy.asrs.wms.system.license.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; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 在项目启动时安装证书 | 
 |  |  |  */ | 
 |  |  | @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); | 
 |  |  |  | 
 |  |  |                 return install != null; | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         licenseTimer.setSystemSupport(false); | 
 |  |  |         return false; | 
 |  |  |     } | 
 |  |  | package com.zy.asrs.wms.system.license;
 | 
 |  |  | 
 | 
 |  |  | import com.zy.asrs.framework.common.Cools;
 | 
 |  |  | import com.zy.asrs.wms.system.license.entity.license.LicenseVerify;
 | 
 |  |  | import com.zy.asrs.wms.system.license.entity.license.LicenseVerifyParam;
 | 
 |  |  | import com.zy.asrs.wms.system.license.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;
 | 
 |  |  |     }
 | 
 |  |  | } |