1 .使用JDK自带的 keytool 工具生成公私钥证书库,私钥用于生成License文件,公钥用于验证License文件,我这里只是给一个时间验证,证书的过期时间
生成证书接口
Controller层
@RequestMapping(value
= "/generateLicense",produces
= {MediaType
.APPLICATION_JSON_UTF8_VALUE
})
public Map
<String,Object> generateLicense(@RequestBody(required
= true) LicenseCreatorParam param
) {
Map
<String,Object> resultMap
= new HashMap<>(2);
if(StringUtils
.isBlank(param
.getLicensePath())){
param
.setLicensePath(licensePath
);
}
LicenseCreator licenseCreator
= new LicenseCreator(param
);
boolean result
= licenseCreator
.generateLicense();
if(result
){
resultMap
.put("result","ok");
resultMap
.put("msg",param
);
}else{
resultMap
.put("result","error");
resultMap
.put("msg","证书文件生成失败!");
}
return resultMap
;
}
public boolean generateLicense(){
try {
LicenseManager licenseManager
= new CustomLicenseManager(initLicenseParam());
LicenseContent licenseContent
= initLicenseContent();
licenseManager
.store(licenseContent
,new File(param
.getLicensePath()));
return true;
}catch (Exception e
){
logger
.error(MessageFormat
.format("证书生成失败:{0}",param
),e
);
return false;
}
}
验证License证书
@Component
public class LicenseCheckListener implements ApplicationListener<ContextRefreshedEvent> {
private static Logger logger
= LogManager
.getLogger(LicenseCheckListener
.class);
@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
;
@Override
public void onApplicationEvent(ContextRefreshedEvent event
) {
ApplicationContext context
= event
.getApplicationContext().getParent();
if(context
== null
){
if(StringUtils
.isNotBlank(licensePath
)){
logger
.info("++++++++ 开始安装证书 ++++++++");
LicenseVerifyParam param
= new LicenseVerifyParam();
param
.setSubject(subject
);
param
.setPublicAlias(publicAlias
);
param
.setStorePass(storePass
);
param
.setLicensePath(licensePath
);
param
.setPublicKeysStorePath(publicKeysStorePath
);
LicenseVerify licenseVerify
= new LicenseVerify();
licenseVerify
.install(param
);
logger
.info("++++++++ 证书安装结束 ++++++++");
}
}
}
@Scheduled(cron
= "0 0 0 * * ?")
public void aVoid( ){
if(StringUtils
.isNotBlank(licensePath
)){
logger
.info("++++++++ 开始安装证书 ++++++++");
LicenseVerifyParam param
= new LicenseVerifyParam();
param
.setSubject(subject
);
param
.setPublicAlias(publicAlias
);
param
.setStorePass(storePass
);
param
.setLicensePath(licensePath
);
param
.setPublicKeysStorePath(publicKeysStorePath
);
LicenseVerify licenseVerify
= new LicenseVerify();
licenseVerify
.install(param
);
logger
.info("++++++++ 证书安装结束 ++++++++");
}
}
}