package com.qxueyou.scc.base.service.impl; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import javax.annotation.PostConstruct; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.tomcat.util.http.fileupload.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Service; import com.license4j.License; import com.license4j.LicenseValidator; import com.qxueyou.scc.base.util.AESUtil; import com.qxueyou.scc.config.SccConfig; @Service public final class LicenseChecker{ private final Logger log = LogManager.getLogger(LicenseChecker.class); @Autowired private SccConfig config; @Autowired ResourceLoader resourceLoader; private License license; public License getLicense() { return license; } @PostConstruct private void init() { String licenseText = readLicense(); license = LicenseValidator.validate( licenseText, AESUtil.decrypt(config.getLicensePublicKey()), config.getProductId(), null, null, null, null); switch (license.getValidationStatus()) { case LICENSE_VALID: log.info("license valid"); break; case LICENSE_INVALID: exit("LICENSE_INVALID"); break; case LICENSE_EXPIRED: exit("LICENSE_EXPIRED"); break; case LICENSE_MAINTENANCE_EXPIRED: exit("LICENSE_MAINTENANCE_EXPIRED"); break; case INCORRECT_SYSTEM_TIME: exit("INCORRECT_SYSTEM_TIME"); break; case MISMATCH_HARDWARE_ID: exit("MISMATCH_HARDWARE_ID"); break; case MISMATCH_PRODUCT_ID: exit("MISMATCH_PRODUCT_ID"); break; case MISMATCH_PRODUCT_EDITION: exit("MISMATCH_PRODUCT_EDITION"); break; case MISMATCH_PRODUCT_VERSION: exit("MISMATCH_PRODUCT_VERSION"); break; case FLOATING_LICENSE_ALLOWED_USE_COUNT_REACHED: exit("FLOATING_LICENSE_ALLOWED_USE_COUNT_REACHED"); break; case FLOATING_LICENSE_ALLOWED_USE_TIME_REACHED: exit("FLOATING_LICENSE_ALLOWED_USE_TIME_REACHED"); break; case FLOATING_LICENSE_CLIENT_REJECTED: exit("FLOATING_LICENSE_CLIENT_REJECTED"); break; case FLOATING_LICENSE_NOT_AVAILABLE_ALL_IN_USE: exit("FLOATING_LICENSE_NOT_AVAILABLE_ALL_IN_USE"); break; case FLOATING_LICENSE_NOT_FOUND: exit("FLOATING_LICENSE_NOT_FOUND"); break; case FLOATING_LICENSE_OVERUSED: exit("FLOATING_LICENSE_OVERUSED"); break; case FLOATING_LICENSE_SERVER_NOT_AVAILABLE: exit("FLOATING_LICENSE_SERVER_NOT_AVAILABLE"); break; case VALIDATION_REJECTED_FEATURE_DISABLED: exit("VALIDATION_REJECTED_FEATURE_DISABLED"); break; case VALIDATION_REJECTED_IP_BLOCK_RESTRICTION: exit("VALIDATION_REJECTED_IP_BLOCK_RESTRICTION"); break; default: break; } } private String readLicense() { Resource resource = resourceLoader.getResource(config.getLicensePath()); BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(resource.getInputStream()),1024); StringBuilder stringBuilder = new StringBuilder(2000); String line; while ((line = br.readLine()) != null) { stringBuilder.append(line).append('\n'); } return stringBuilder.toString(); } catch (IOException e) { log.error(e,e); } finally { IOUtils.closeQuietly(br); } return null; } private void exit(String msg) { log.error("license invalid:"+msg); /** * 临时屏蔽 */ // System.exit(-1); } }