| package com.zy.asrs.common.sys.entity.license; | 
|   | 
| import de.schlichtherle.license.*; | 
| import org.apache.logging.log4j.LogManager; | 
| import org.apache.logging.log4j.Logger; | 
|   | 
| import java.io.File; | 
| import java.text.DateFormat; | 
| import java.text.MessageFormat; | 
| import java.text.SimpleDateFormat; | 
| import java.util.prefs.Preferences; | 
|   | 
| /** | 
|  * License校验类 | 
|  */ | 
| public class LicenseVerify { | 
|     private static Logger logger = LogManager.getLogger(LicenseVerify.class); | 
|   | 
|     /** | 
|      * 安装License证书 | 
|      */ | 
|     public synchronized LicenseContent install(LicenseVerifyParam param){ | 
|         LicenseContent result = null; | 
|         DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | 
|   | 
|         //1. 安装证书 | 
|         try{ | 
|             LicenseManager licenseManager = LicenseManagerHolder.getInstance(initLicenseParam(param)); | 
|             licenseManager.uninstall(); | 
|   | 
|             result = licenseManager.install(new File(param.getLicensePath())); | 
|             logger.info(MessageFormat.format("许可证加载成功,许可证有效期:{0} - {1}",format.format(result.getNotBefore()),format.format(result.getNotAfter()))); | 
|         }catch (Exception e){ | 
|             logger.error("许可证加载失败!",e); | 
|         } | 
|   | 
|         return result; | 
|     } | 
|   | 
|     /** | 
|      * 校验License证书 | 
|      */ | 
|     public boolean verify(){ | 
|         try { | 
|             LicenseManager licenseManager = LicenseManagerHolder.getInstance(null); | 
|             DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | 
|   | 
|             if (!updateSystemTime()) { | 
|                 //时间更新失败,系统时间被更改 | 
|                 return false; | 
|             } | 
|   | 
|             LicenseContent licenseContent = licenseManager.verify(); | 
|             logger.info(MessageFormat.format("许可证校验通过,许可证有效期:{0} - {1}",format.format(licenseContent.getNotBefore()),format.format(licenseContent.getNotAfter()))); | 
|             return true; | 
|         }catch (Exception e){ | 
|             logger.error("许可证校验失败!",e); | 
|             return false; | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 校验License证书并获取证书信息 | 
|      */ | 
|     public LicenseContent getVerifyInfo(){ | 
|         LicenseManager licenseManager = LicenseManagerHolder.getInstance(null); | 
|   | 
|         if (!updateSystemTime()) { | 
|             //时间更新失败,系统时间被更改 | 
|             return null; | 
|         } | 
|   | 
|         //校验证书 | 
|         try { | 
|             LicenseContent licenseContent = licenseManager.verify(); | 
|             return licenseContent; | 
|         }catch (Exception e){ | 
|             logger.error("许可证校验失败!",e); | 
|             return null; | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 初始化证书生成参数 | 
|      * @param param License校验类需要的参数 | 
|      * @return de.schlichtherle.license.LicenseParam | 
|      */ | 
|     private LicenseParam initLicenseParam(LicenseVerifyParam param){ | 
|         Preferences preferences = Preferences.userNodeForPackage(LicenseVerify.class); | 
|   | 
|         CipherParam cipherParam = new DefaultCipherParam(param.getStorePass()); | 
|   | 
|         KeyStoreParam publicStoreParam = new CustomKeyStoreParam(LicenseVerify.class | 
|                 ,param.getPublicKeysStorePath() | 
|                 ,param.getPublicAlias() | 
|                 ,param.getStorePass() | 
|                 ,null); | 
|   | 
|         return new DefaultLicenseParam(param.getSubject() | 
|                 ,preferences | 
|                 ,publicStoreParam | 
|                 ,cipherParam); | 
|     } | 
|   | 
|     /** | 
|      * 更新时间到注册表中 | 
|      */ | 
|     private boolean updateSystemTime() { | 
|         // 获取用户根节点 | 
|         Preferences userRoot = Preferences.userRoot(); | 
|         // 获取指定路径下的节点 | 
|         Preferences node = userRoot.node("/zhongyang"); | 
|         String key = "time"; | 
|         // 读取注册表 | 
|         String value = node.get(key, null); | 
|         if (value != null) { | 
|             long originTime = Long.parseLong(value); | 
|             long now = System.currentTimeMillis(); | 
|             long diff = now - originTime;//现在时间 - 源时间 = 时间差 | 
|             if (diff > 0) { | 
|                 //时间差大于0才允许更新注册表时间 | 
|                 node.put(key, String.valueOf(System.currentTimeMillis())); | 
|                 return true; | 
|             } | 
|         }else { | 
|             // 写入注册表 | 
|             node.put(key, String.valueOf(System.currentTimeMillis())); | 
|             return true; | 
|         } | 
|         return false; | 
|     } | 
|   | 
| } |