|  |  |  | 
|---|
|  |  |  | package com.zy.system.timer; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.zy.system.entity.license.LicenseVerify; | 
|---|
|  |  |  | import com.alibaba.fastjson.JSON; | 
|---|
|  |  |  | import com.alibaba.fastjson.JSONObject; | 
|---|
|  |  |  | import com.core.common.Cools; | 
|---|
|  |  |  | import com.zy.common.utils.HttpHandler; | 
|---|
|  |  |  | import com.zy.system.entity.LicenseInfos; | 
|---|
|  |  |  | import com.zy.system.entity.license.*; | 
|---|
|  |  |  | import com.zy.system.service.LicenseInfosService; | 
|---|
|  |  |  | import de.schlichtherle.license.LicenseContent; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Value; | 
|---|
|  |  |  | import org.springframework.scheduling.annotation.Scheduled; | 
|---|
|  |  |  | import org.springframework.stereotype.Component; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.HashMap; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Component | 
|---|
|  |  |  | public class LicenseTimer { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static int LICENSE_DAYS = 0;//许可证天数 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 证书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 LicenseInfosService licenseInfosService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //每天晚上11点更新系统激活状态 | 
|---|
|  |  |  | @Scheduled(cron = "0 0 23 * * ? ") | 
|---|
|  |  |  | public void timer() { | 
|---|
|  |  |  | //        System.out.println(SYSTEM_SUPPORT); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | getRemoteLicense(); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | verify(); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void getRemoteLicense() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | AbstractServerInfos abstractServerInfos = null; | 
|---|
|  |  |  | String osName = System.getProperty("os.name"); | 
|---|
|  |  |  | //根据不同操作系统类型选择不同的数据获取方法 | 
|---|
|  |  |  | if (osName.startsWith("windows")) { | 
|---|
|  |  |  | abstractServerInfos = new WindowsServerInfos(); | 
|---|
|  |  |  | } else if (osName.startsWith("linux")) { | 
|---|
|  |  |  | abstractServerInfos = new LinuxServerInfos(); | 
|---|
|  |  |  | }else{//其他服务器类型 | 
|---|
|  |  |  | abstractServerInfos = new WindowsServerInfos(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | LicenseCheck serverInfos = abstractServerInfos.getServerInfos(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | HashMap<String, Object> map = new HashMap<>(); | 
|---|
|  |  |  | map.put("subject", subject); | 
|---|
|  |  |  | map.put("licenseCheck", serverInfos); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String response = new HttpHandler.Builder() | 
|---|
|  |  |  | .setUri("http://net.zoneyung.net:9999/license") | 
|---|
|  |  |  | .setPath("/remoteQueryLicense") | 
|---|
|  |  |  | .setJson(JSON.toJSONString(map)) | 
|---|
|  |  |  | .build() | 
|---|
|  |  |  | .doPost(); | 
|---|
|  |  |  | JSONObject jsonObject = JSON.parseObject(response); | 
|---|
|  |  |  | if (jsonObject.getString("result").equals("ok")) { | 
|---|
|  |  |  | LicenseInfos licenseInfos = new LicenseInfos(); | 
|---|
|  |  |  | licenseInfos.setLicense(jsonObject.getString("data")); | 
|---|
|  |  |  | licenseInfos.setCreateTime(new Date()); | 
|---|
|  |  |  | licenseInfos.setLicenseTime(jsonObject.getString("licenseTime")); | 
|---|
|  |  |  | licenseInfosService.insert(licenseInfos); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void verify() { | 
|---|
|  |  |  | LicenseInfos latestLicense = licenseInfosService.getLatestLicense(); | 
|---|
|  |  |  | if (latestLicense == null) { | 
|---|
|  |  |  | setLicenseDays(0); | 
|---|
|  |  |  | setSystemSupport(false); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LicenseVerifyParam param = new LicenseVerifyParam(); | 
|---|
|  |  |  | param.setSubject(subject); | 
|---|
|  |  |  | param.setPublicAlias(publicAlias); | 
|---|
|  |  |  | param.setStorePass(storePass); | 
|---|
|  |  |  | param.setLicensePath(licensePath); | 
|---|
|  |  |  | param.setPublicKeysStorePath(publicKeysStorePath); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //验证许可证是否有效 | 
|---|
|  |  |  | LicenseVerify licenseVerify = new LicenseVerify(); | 
|---|
|  |  |  | boolean verify = licenseVerify.verify(); | 
|---|
|  |  |  | setSystemSupport(verify);//更新系统激活状态 | 
|---|
|  |  |  | //安装证书 | 
|---|
|  |  |  | LicenseContent install = licenseVerify.install(param, latestLicense.getLicense()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | setLicenseDays(day); | 
|---|
|  |  |  | setSystemSupport(true); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | setLicenseDays(0); | 
|---|
|  |  |  | setSystemSupport(false); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public boolean getSystemSupport() { | 
|---|