| | |
| | | package com.zy.asrs.wms.system.license.entity.license; |
| | | |
| | | import de.schlichtherle.license.*; |
| | | import org.apache.logging.log4j.LogManager; |
| | | import org.apache.logging.log4j.Logger; |
| | | import org.apache.poi.util.IOUtils; |
| | | |
| | | import java.io.File; |
| | | import java.io.FileOutputStream; |
| | | import java.io.InputStream; |
| | | 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(); |
| | | |
| | | InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(param.getLicensePath()); |
| | | File file = new File(param.getLicensePath()); |
| | | try (FileOutputStream out = new FileOutputStream(file)) { |
| | | IOUtils.copy(inputStream, out); |
| | | } |
| | | result = licenseManager.install(file); |
| | | 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; |
| | | } |
| | | |
| | | package com.zy.asrs.wms.system.license.entity.license;
|
| | |
|
| | | import de.schlichtherle.license.*;
|
| | | import org.apache.logging.log4j.LogManager;
|
| | | import org.apache.logging.log4j.Logger;
|
| | | import org.apache.poi.util.IOUtils;
|
| | |
|
| | | import java.io.File;
|
| | | import java.io.FileOutputStream;
|
| | | import java.io.InputStream;
|
| | | 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();
|
| | |
|
| | | InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(param.getLicensePath());
|
| | | File file = new File(param.getLicensePath());
|
| | | try (FileOutputStream out = new FileOutputStream(file)) {
|
| | | IOUtils.copy(inputStream, out);
|
| | | }
|
| | | result = licenseManager.install(file);
|
| | | 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;
|
| | | }
|
| | |
|
| | | } |