| package com.zy.system.entity.license; | 
|   | 
| import de.schlichtherle.license.*; | 
| import org.apache.logging.log4j.LogManager; | 
| import org.apache.logging.log4j.Logger; | 
|   | 
| import java.io.File; | 
| import java.io.IOException; | 
| import java.nio.file.Files; | 
| import java.nio.file.Path; | 
| import java.text.DateFormat; | 
| import java.text.MessageFormat; | 
| import java.text.SimpleDateFormat; | 
| import java.util.Base64; | 
| import java.util.prefs.Preferences; | 
|   | 
| /** | 
|  * License校验类 | 
|  */ | 
| public class LicenseVerify { | 
|     private static Logger logger = LogManager.getLogger(LicenseVerify.class); | 
|   | 
|     /** | 
|      * 安装License证书 | 
|      */ | 
|     public synchronized LicenseContent install(LicenseVerifyParam param, String license) { | 
|         LicenseContent result = null; | 
|         DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | 
|   | 
|         //1. 安装证书 | 
|         try { | 
|             LicenseParam licenseParam = initLicenseParam(param); | 
|             LicenseManager licenseManager = LicenseManagerHolder.getInstance(licenseParam); | 
|             licenseManager.uninstall(); | 
|   | 
|             File tempFileFromBase64 = createTempFileFromBase64(license); | 
|             result = licenseManager.install(tempFileFromBase64); | 
|             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"); | 
|   | 
|             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); | 
|   | 
|         //校验证书 | 
|         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); | 
|     } | 
|   | 
|     /** | 
|      * 将Base64字符串转换为临时文件 | 
|      * | 
|      * @param base64String Base64编码的字符串 | 
|      * @param filePrefix   文件名前缀(例如 "license_") | 
|      * @param fileSuffix   文件后缀(例如 ".lic") | 
|      * @return 生成的临时File对象(自动在JVM退出时删除) | 
|      * @throws IOException | 
|      */ | 
|     public File base64ToTempFile(String base64String, String filePrefix, String fileSuffix) | 
|             throws IOException { | 
|         // 解码Base64 | 
|         byte[] decodedBytes = Base64.getDecoder().decode(base64String); | 
|         // 创建临时文件 | 
|         Path tempPath = Files.createTempFile(filePrefix, fileSuffix); | 
|         // 写入内容 | 
|         Files.write(tempPath, decodedBytes); | 
|         // 设置JVM退出时自动删除 | 
|         tempPath.toFile().deleteOnExit(); | 
|         return tempPath.toFile(); | 
|     } | 
|   | 
|     public File createTempFileFromBase64(String base64Data) throws IOException { | 
|         return base64ToTempFile(base64Data, "temp_license_", ".bin"); | 
|     } | 
|   | 
| } |