#AI
Junjie
6 小时以前 58dc0727a11481c127fc6111b73fa309b03505b5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.zy.system.entity.license;
 
import com.core.common.Cools;
import com.zy.core.ServerBootstrap;
import com.zy.system.entity.LicenseInfos;
import com.zy.system.service.LicenseInfosService;
import com.zy.system.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;
    @Autowired
    private LicenseInfosService licenseInfosService;
    @Autowired
    private ServerBootstrap serverBootstrap;
 
    @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 {
                licenseTimer.getRemoteLicense();
            } catch (Exception e) {
            }
 
            try {
                LicenseVerifyParam param = new LicenseVerifyParam();
                param.setSubject(subject);
                param.setPublicAlias(publicAlias);
                param.setStorePass(storePass);
                param.setLicensePath(licensePath);
                param.setPublicKeysStorePath(publicKeysStorePath);
 
                LicenseVerify licenseVerify = new LicenseVerify();
 
                LicenseInfos latestLicense = licenseInfosService.getLatestLicense();
                if (latestLicense == null) {
                    logger.info("许可证不存在");
                    return false;
                }
 
                //安装证书
                LicenseContent install = licenseVerify.install(param, latestLicense.getLicense());
 
                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);
 
                    try {
                        serverBootstrap.init();
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
                return install != null;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
        licenseTimer.setSystemSupport(false);
        return false;
    }
}