mirror of
https://github.com/continew-org/continew-starter.git
synced 2025-09-08 16:57:09 +08:00
refactor(license): 优化 license 模块
This commit is contained in:
@@ -276,6 +276,18 @@
|
|||||||
<artifactId>continew-starter-core</artifactId>
|
<artifactId>continew-starter-core</artifactId>
|
||||||
<version>${revision}</version>
|
<version>${revision}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- license 生成模块 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>top.continew</groupId>
|
||||||
|
<artifactId>continew-starter-license-generate</artifactId>
|
||||||
|
<version>${revision}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- license 校验模块 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>top.continew</groupId>
|
||||||
|
<artifactId>continew-starter-license-verify</artifactId>
|
||||||
|
<version>${revision}</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
|
||||||
|
@@ -139,6 +139,21 @@ public class PropertiesConstants {
|
|||||||
*/
|
*/
|
||||||
public static final String TRACE = CONTINEW_STARTER + StringConstants.DOT + "trace";
|
public static final String TRACE = CONTINEW_STARTER + StringConstants.DOT + "trace";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* license配置
|
||||||
|
*/
|
||||||
|
public static final String LICENSE = CONTINEW_STARTER + StringConstants.DOT + "license";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* license 生成模块配置
|
||||||
|
*/
|
||||||
|
public static final String LICENSE_GENERATE = LICENSE + StringConstants.DOT + "generate";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* license 校验模块配置
|
||||||
|
*/
|
||||||
|
public static final String LICENSE_VERIFY = LICENSE + StringConstants.DOT + "verify";
|
||||||
|
|
||||||
private PropertiesConstants() {
|
private PropertiesConstants() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -48,6 +48,10 @@
|
|||||||
<commons-beanutils.version>1.9.4</commons-beanutils.version>
|
<commons-beanutils.version>1.9.4</commons-beanutils.version>
|
||||||
<commons-io.version>2.17.0</commons-io.version>
|
<commons-io.version>2.17.0</commons-io.version>
|
||||||
<commons-compress.version>1.26.0</commons-compress.version>
|
<commons-compress.version>1.26.0</commons-compress.version>
|
||||||
|
<!--license-->
|
||||||
|
<truelicense.version>1.33</truelicense.version>
|
||||||
|
<zip4j.version>2.11.5</zip4j.version>
|
||||||
|
|
||||||
<!-- Maven Plugin Versions -->
|
<!-- Maven Plugin Versions -->
|
||||||
<flatten.version>1.7.0</flatten.version>
|
<flatten.version>1.7.0</flatten.version>
|
||||||
<spotless.version>2.44.3</spotless.version>
|
<spotless.version>2.44.3</spotless.version>
|
||||||
@@ -370,6 +374,20 @@
|
|||||||
<version>${commons-compress.version}</version>
|
<version>${commons-compress.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- license 依赖-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>de.schlichtherle.truelicense</groupId>
|
||||||
|
<artifactId>truelicense-core</artifactId>
|
||||||
|
<version>${truelicense.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!--zip4j压缩文件-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.lingala.zip4j</groupId>
|
||||||
|
<artifactId>zip4j</artifactId>
|
||||||
|
<version>${zip4j.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- ContiNew Starter 依赖 -->
|
<!-- ContiNew Starter 依赖 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>top.continew</groupId>
|
<groupId>top.continew</groupId>
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
## continew-starter-license-generate 食用方法
|
## continew-starter-license-generate 使用方法
|
||||||
|
|
||||||
1. 引入依赖
|
1. 引入依赖
|
||||||
|
|
||||||
@@ -66,7 +66,8 @@ public class LicenseGenerateController {
|
|||||||
paramVO.setStorePass("123456a");
|
paramVO.setStorePass("123456a");
|
||||||
//设置过期时间
|
//设置过期时间
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = Calendar.getInstance();
|
||||||
long expire = new Date().getTime() + (24L * 3600L * 1000L);
|
long expire = Instant.now().toEpochMilli() + (24L * 3600L * 1000L);;
|
||||||
|
// long expire = new Date().getTime() + (24L * 3600L * 1000L);
|
||||||
calendar.setTimeInMillis(expire);
|
calendar.setTimeInMillis(expire);
|
||||||
paramVO.setExpireTime(calendar.getTime());
|
paramVO.setExpireTime(calendar.getTime());
|
||||||
//设置额外校验参数(服务器信息)
|
//设置额外校验参数(服务器信息)
|
||||||
@@ -78,7 +79,4 @@ public class LicenseGenerateController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
注:默认生成 license 为FileUtil.getTmpDirPath()下。将压缩包发送给客户端使用。
|
||||||
|
|
||||||
|
|
||||||
注:默认生成 license 为C:/license下。将压缩包发送给客户端使用。
|
|
@@ -13,64 +13,23 @@
|
|||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<description>license 生成模块 基于 truelicens 实现</description>
|
<description>license 生成模块 基于 truelicens 实现</description>
|
||||||
|
|
||||||
<properties>
|
|
||||||
<truelicense.version>1.33</truelicense.version>
|
|
||||||
<zip4j.version>2.2.6</zip4j.version>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<!--ContiNew Starter 日志模块 - 核心模块-->
|
||||||
<dependency>
|
|
||||||
<groupId>junit</groupId>
|
|
||||||
<artifactId>junit</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-test</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>top.continew</groupId>
|
<groupId>top.continew</groupId>
|
||||||
<artifactId>continew-starter-log-core</artifactId>
|
<artifactId>continew-starter-log-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- license 依赖-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>de.schlichtherle.truelicense</groupId>
|
<groupId>de.schlichtherle.truelicense</groupId>
|
||||||
<artifactId>truelicense-core</artifactId>
|
<artifactId>truelicense-core</artifactId>
|
||||||
<version>${truelicense.version}</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--zip4j压缩文件-->
|
<!--zip4j压缩文件-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.lingala.zip4j</groupId>
|
<groupId>net.lingala.zip4j</groupId>
|
||||||
<artifactId>zip4j</artifactId>
|
<artifactId>zip4j</artifactId>
|
||||||
<version>${zip4j.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!--jackson-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-databind</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-annotations</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!--apache-commons-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.commons</groupId>
|
|
||||||
<artifactId>commons-lang3</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-test</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
|
|
||||||
* <p>
|
|
||||||
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* <p>
|
|
||||||
* http://www.gnu.org/licenses/lgpl.html
|
|
||||||
* <p>
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package top.continew.license.autoConfiguration;
|
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import top.continew.license.service.LicenseCreateService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Desc:
|
|
||||||
* @Author loach
|
|
||||||
* @ClassName top.continew.license.AutoConfiguration.LicenseGenerateAutoConfiguration
|
|
||||||
* @Date 2025-03-23 10:57
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
public class LicenseGenerateAutoConfiguration {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnMissingBean
|
|
||||||
public LicenseCreateService licenseCreateService() {
|
|
||||||
return LicenseCreateService.getInstance();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
|
||||||
|
* <p>
|
||||||
|
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* <p>
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
* <p>
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package top.continew.license.autoconfigure;
|
||||||
|
|
||||||
|
import jakarta.annotation.PostConstruct;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
|
||||||
|
import top.continew.license.service.LicenseCreateService;
|
||||||
|
import top.continew.starter.core.constant.PropertiesConstants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* license 生成模块 自动配置
|
||||||
|
*
|
||||||
|
* @author loach
|
||||||
|
* @since 1.2.0
|
||||||
|
*/
|
||||||
|
@AutoConfiguration
|
||||||
|
@EnableConfigurationProperties(LicenseGenerateProperties.class)
|
||||||
|
@ConditionalOnProperty(prefix = PropertiesConstants.LICENSE_GENERATE, name = PropertiesConstants.ENABLED, havingValue = "true", matchIfMissing = true)
|
||||||
|
public class LicenseGenerateAutoConfiguration {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(LicenseGenerateAutoConfiguration.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* license 生成服务接口
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
@ConditionalOnMissingBean
|
||||||
|
public LicenseCreateService licenseCreateService() {
|
||||||
|
return LicenseCreateService.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void postConstruct() {
|
||||||
|
log.debug("[ContiNew Starter] - Auto Configuration 'License-Generate' completed initialization.");
|
||||||
|
}
|
||||||
|
}
|
@@ -14,27 +14,29 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package top.continew.license.config;
|
package top.continew.license.autoconfigure;
|
||||||
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import top.continew.starter.core.constant.PropertiesConstants;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Desc:
|
* license 生成模块配置属性
|
||||||
* @Author loach
|
*
|
||||||
* @ClassName top.continew.license.config.LicenseYmlConfig
|
* @author Jasmine
|
||||||
* @Date 2025-04-14 14:56
|
* @since 1.2.0
|
||||||
*/
|
*/
|
||||||
@ConfigurationProperties(prefix = "license")
|
@ConfigurationProperties(PropertiesConstants.LICENSE_GENERATE)
|
||||||
public class LicenseVerifyProperties {
|
public class LicenseGenerateProperties {
|
||||||
|
/**
|
||||||
|
* 是否启用
|
||||||
|
*/
|
||||||
|
private boolean enabled = true;
|
||||||
|
|
||||||
private String savePath;
|
public boolean isEnabled() {
|
||||||
|
return enabled;
|
||||||
public String getSavePath() {
|
|
||||||
return savePath;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSavePath(String savePath) {
|
public void setEnabled(boolean enabled) {
|
||||||
this.savePath = savePath;
|
this.enabled = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -16,12 +16,33 @@
|
|||||||
|
|
||||||
package top.continew.license.service;
|
package top.continew.license.service;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import java.io.File;
|
||||||
import de.schlichtherle.license.*;
|
import java.io.FileOutputStream;
|
||||||
import net.lingala.zip4j.ZipFile;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.prefs.Preferences;
|
||||||
|
|
||||||
|
import javax.security.auth.x500.X500Principal;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
|
import de.schlichtherle.license.CipherParam;
|
||||||
|
import de.schlichtherle.license.DefaultCipherParam;
|
||||||
|
import de.schlichtherle.license.DefaultLicenseParam;
|
||||||
|
import de.schlichtherle.license.KeyStoreParam;
|
||||||
|
import de.schlichtherle.license.LicenseContent;
|
||||||
|
import de.schlichtherle.license.LicenseManager;
|
||||||
|
import de.schlichtherle.license.LicenseParam;
|
||||||
|
import net.lingala.zip4j.ZipFile;
|
||||||
import top.continew.license.dto.ConfigParam;
|
import top.continew.license.dto.ConfigParam;
|
||||||
import top.continew.license.dto.LicenseCreatorParam;
|
import top.continew.license.dto.LicenseCreatorParam;
|
||||||
import top.continew.license.dto.LicenseCreatorParamVO;
|
import top.continew.license.dto.LicenseCreatorParamVO;
|
||||||
@@ -32,13 +53,6 @@ import top.continew.license.manager.ServerLicenseManager;
|
|||||||
import top.continew.license.util.ExecCmdUtil;
|
import top.continew.license.util.ExecCmdUtil;
|
||||||
import top.continew.license.util.ServerInfoUtils;
|
import top.continew.license.util.ServerInfoUtils;
|
||||||
|
|
||||||
import javax.security.auth.x500.X500Principal;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.prefs.Preferences;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 证书生成接口 实现类
|
* 证书生成接口 实现类
|
||||||
*
|
*
|
||||||
@@ -114,7 +128,7 @@ public class LicenseCreateService {
|
|||||||
String privateAlias = customerName + "-private-alias";
|
String privateAlias = customerName + "-private-alias";
|
||||||
String publicAlias = customerName + "-public-alias";
|
String publicAlias = customerName + "-public-alias";
|
||||||
String relativePath = relativePath(paramVO);
|
String relativePath = relativePath(paramVO);
|
||||||
String currentCustomerDir = relativePath + customerName + uuid() + "/";
|
String currentCustomerDir = relativePath + customerName + uuid() + File.separator;
|
||||||
File file = new File(currentCustomerDir);
|
File file = new File(currentCustomerDir);
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
file.mkdirs();
|
file.mkdirs();
|
||||||
|
@@ -16,13 +16,13 @@
|
|||||||
|
|
||||||
package top.continew.license.util;
|
package top.continew.license.util;
|
||||||
|
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.LineNumberReader;
|
import java.io.LineNumberReader;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ArrayUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 运行命令行工具类
|
* 运行命令行工具类
|
||||||
*
|
*
|
||||||
@@ -50,7 +50,7 @@ public class ExecCmdUtil {
|
|||||||
process = Runtime.getRuntime().exec(cmd);
|
process = Runtime.getRuntime().exec(cmd);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
cmd = ArrayUtils.addAll(new String[] {"/bin/sh", "-c"}, cmd);
|
cmd = ArrayUtil.addAll(new String[] {"/bin/sh", "-c"}, cmd);
|
||||||
process = Runtime.getRuntime().exec(cmd);
|
process = Runtime.getRuntime().exec(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1 +1 @@
|
|||||||
top.continew.license.autoConfiguration.LicenseGenerateAutoConfiguration
|
top.continew.license.autoconfigure.LicenseGenerateAutoConfiguration
|
@@ -13,10 +13,10 @@
|
|||||||
2. 配置YML(license 压缩包存放位置)
|
2. 配置YML(license 压缩包存放位置)
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
license:
|
continew-starter:
|
||||||
savePath: D:/license/
|
license:
|
||||||
|
verify:
|
||||||
|
storePath: D:/license
|
||||||
```
|
```
|
||||||
|
|
||||||
|
注:默认加载 `FileUtil.getTmpDirPath()` 位置。
|
||||||
|
|
||||||
注:默认加载 `D:/license/` 位置。
|
|
@@ -13,54 +13,23 @@
|
|||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<description>license 校验模块 基于 truelicens 实现</description>
|
<description>license 校验模块 基于 truelicens 实现</description>
|
||||||
|
|
||||||
<properties>
|
|
||||||
<truelicense.version>1.33</truelicense.version>
|
|
||||||
<zip4j.version>2.2.6</zip4j.version>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<!--ContiNew Starter 日志模块 - 核心模块-->
|
||||||
<dependency>
|
|
||||||
<groupId>junit</groupId>
|
|
||||||
<artifactId>junit</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>top.continew</groupId>
|
<groupId>top.continew</groupId>
|
||||||
<artifactId>continew-starter-log-core</artifactId>
|
<artifactId>continew-starter-log-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<!-- license 依赖-->
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>de.schlichtherle.truelicense</groupId>
|
<groupId>de.schlichtherle.truelicense</groupId>
|
||||||
<artifactId>truelicense-core</artifactId>
|
<artifactId>truelicense-core</artifactId>
|
||||||
<version>${truelicense.version}</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--zip4j压缩文件-->
|
<!--zip4j压缩文件-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.lingala.zip4j</groupId>
|
<groupId>net.lingala.zip4j</groupId>
|
||||||
<artifactId>zip4j</artifactId>
|
<artifactId>zip4j</artifactId>
|
||||||
<version>${zip4j.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!--jackson-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-databind</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-annotations</artifactId>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
@@ -17,31 +17,25 @@
|
|||||||
package top.continew.license.Initializing;
|
package top.continew.license.Initializing;
|
||||||
|
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import top.continew.license.bean.LicenseInstallerBean;
|
import top.continew.license.bean.LicenseInstallerBean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 启动校验 License
|
* 启动校验 License
|
||||||
*
|
*
|
||||||
* @Desc:
|
* @author loach
|
||||||
* @Author loach
|
* @since 1.2.0
|
||||||
* @ClassName top.continew.license.Initializing.LicenseStarterAutoConfiguration
|
|
||||||
* @Date 2025-04-11 15:40
|
|
||||||
*/
|
*/
|
||||||
@Configuration
|
|
||||||
@EnableConfigurationProperties(LicenseStarterInitializingBean.class)
|
|
||||||
public class LicenseStarterInitializingBean implements InitializingBean {
|
public class LicenseStarterInitializingBean implements InitializingBean {
|
||||||
|
private final LicenseInstallerBean licenseInstallerBean;
|
||||||
|
|
||||||
@Autowired
|
public LicenseStarterInitializingBean(LicenseInstallerBean licenseInstallerBean) {
|
||||||
private LicenseInstallerBean licenseInstallerBean;
|
this.licenseInstallerBean = licenseInstallerBean;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() throws Exception {
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
// 安装证书,即校验客户机器参数是否符合证书要求,符合则安装成功,不符合则报错无法启动。
|
||||||
//安装证书,即校验客户机器参数是否符合证书要求,符合则安装成功,不符合则报错无法启动。
|
|
||||||
licenseInstallerBean.installLicense();
|
licenseInstallerBean.installLicense();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
|
||||||
|
* <p>
|
||||||
|
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* <p>
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
* <p>
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package top.continew.license.autoconfigure;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.DependsOn;
|
||||||
|
|
||||||
|
import de.schlichtherle.license.LicenseManager;
|
||||||
|
import jakarta.annotation.PostConstruct;
|
||||||
|
import top.continew.license.Initializing.LicenseStarterInitializingBean;
|
||||||
|
import top.continew.license.bean.LicenseInstallerBean;
|
||||||
|
import top.continew.license.manager.CustomLicenseManager;
|
||||||
|
import top.continew.starter.core.constant.PropertiesConstants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* license 校验模块 自动配置
|
||||||
|
*
|
||||||
|
* @author loach
|
||||||
|
* @since 1.2.0
|
||||||
|
*/
|
||||||
|
@AutoConfiguration
|
||||||
|
@EnableConfigurationProperties(LicenseVerifyProperties.class)
|
||||||
|
@ConditionalOnProperty(prefix = PropertiesConstants.LICENSE_VERIFY, name = PropertiesConstants.ENABLED, havingValue = "true", matchIfMissing = true)
|
||||||
|
public class LicenseVerifyAutoConfiguration {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(LicenseVerifyAutoConfiguration.class);
|
||||||
|
|
||||||
|
/** 证书安装业务类 */
|
||||||
|
@Bean
|
||||||
|
public LicenseInstallerBean licenseInstallerBean(LicenseVerifyProperties properties) {
|
||||||
|
return new LicenseInstallerBean(properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启动校验 License服务
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
@DependsOn("licenseInstallerBean")
|
||||||
|
public LicenseStarterInitializingBean licenseStarterInitializingBean(LicenseInstallerBean licenseInstallerBean) {
|
||||||
|
return new LicenseStarterInitializingBean(licenseInstallerBean);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 客户端证书管理类(证书验证) */
|
||||||
|
@Bean
|
||||||
|
public LicenseManager licenseManager(LicenseVerifyProperties properties) {
|
||||||
|
return CustomLicenseManager.getInstance(properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void postConstruct() {
|
||||||
|
log.debug("[ContiNew Starter] - Auto Configuration 'License-Verify' completed initialization.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
|
||||||
|
* <p>
|
||||||
|
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* <p>
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
* <p>
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package top.continew.license.autoconfigure;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
|
||||||
|
import cn.hutool.core.io.FileUtil;
|
||||||
|
import top.continew.starter.core.constant.PropertiesConstants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* license 校验模块配置属性
|
||||||
|
*
|
||||||
|
* @author loach
|
||||||
|
* @since 1.2.0
|
||||||
|
*/
|
||||||
|
@ConfigurationProperties(PropertiesConstants.LICENSE_VERIFY)
|
||||||
|
public class LicenseVerifyProperties {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否启用
|
||||||
|
*/
|
||||||
|
private boolean enabled = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成的license文件所在路径
|
||||||
|
*/
|
||||||
|
private String storePath = FileUtil.getTmpDirPath();
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnabled(boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStorePath() {
|
||||||
|
return storePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStorePath(String storePath) {
|
||||||
|
this.storePath = storePath;
|
||||||
|
}
|
||||||
|
}
|
@@ -19,7 +19,7 @@ package top.continew.license.bean;
|
|||||||
import de.schlichtherle.license.*;
|
import de.schlichtherle.license.*;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import top.continew.license.config.LicenseVerifyProperties;
|
import top.continew.license.autoconfigure.LicenseVerifyProperties;
|
||||||
import top.continew.license.exception.VerifyException;
|
import top.continew.license.exception.VerifyException;
|
||||||
import top.continew.license.manager.CustomLicenseManager;
|
import top.continew.license.manager.CustomLicenseManager;
|
||||||
|
|
||||||
@@ -28,45 +28,28 @@ import java.io.*;
|
|||||||
/**
|
/**
|
||||||
* 证书安装业务类
|
* 证书安装业务类
|
||||||
*
|
*
|
||||||
* @Desc:
|
* @author loach
|
||||||
* @Author loach
|
* @since 1.2.0
|
||||||
* @ClassName top.continew.license.bean.LicenseInstallerBean
|
|
||||||
* @Date 2025-04-15 15:05
|
|
||||||
*/
|
*/
|
||||||
public class LicenseInstallerBean {
|
public class LicenseInstallerBean {
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(LicenseInstallerBean.class);
|
private static final Logger log = LoggerFactory.getLogger(LicenseInstallerBean.class);
|
||||||
|
|
||||||
private String licensePath;
|
|
||||||
|
|
||||||
private LicenseManager licenseManager;
|
private LicenseManager licenseManager;
|
||||||
|
|
||||||
private LicenseVerifyProperties properties;
|
private LicenseVerifyProperties properties;
|
||||||
|
|
||||||
public LicenseInstallerBean(LicenseVerifyProperties properties) {
|
public LicenseInstallerBean(LicenseVerifyProperties properties) {
|
||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
|
|
||||||
if (properties == null || properties.getSavePath() == null) {
|
|
||||||
String os = System.getProperty("os.name");
|
|
||||||
if (os.toLowerCase().contains("windows")) {
|
|
||||||
this.licensePath = "D:/license/";
|
|
||||||
}
|
|
||||||
this.licensePath = "/data/license/";
|
|
||||||
} else {
|
|
||||||
this.licensePath = properties.getSavePath();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//安装证书
|
// 安装证书
|
||||||
public void installLicense() throws Exception {
|
public void installLicense() throws Exception {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
licenseManager = CustomLicenseManager.getInstance(properties);
|
licenseManager = CustomLicenseManager.getInstance(properties);
|
||||||
licenseManager.uninstall();
|
licenseManager.uninstall();
|
||||||
LicenseContent licenseContent = licenseManager
|
LicenseContent licenseContent = licenseManager.install(new File(properties
|
||||||
.install(new File(getLicensePath() + "clientLicense/license.lic"));
|
.getStorePath() + File.separator + "clientLicense/license.lic"));
|
||||||
log.info("证书认证通过,安装成功");
|
log.info("证书认证通过,安装成功");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -92,13 +75,4 @@ public class LicenseInstallerBean {
|
|||||||
throw new VerifyException("证书认证失败:licenseManager is null");
|
throw new VerifyException("证书认证失败:licenseManager is null");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取license文件位置
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private String getLicensePath() {
|
|
||||||
return licensePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
|
|
||||||
* <p>
|
|
||||||
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* <p>
|
|
||||||
* http://www.gnu.org/licenses/lgpl.html
|
|
||||||
* <p>
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package top.continew.license.config;
|
|
||||||
|
|
||||||
import de.schlichtherle.license.*;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import top.continew.license.bean.LicenseInstallerBean;
|
|
||||||
import top.continew.license.manager.CustomLicenseManager;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Desc:
|
|
||||||
* @Author loach
|
|
||||||
* @ClassName top.continew.license.config.LicenseAutoConfiguration
|
|
||||||
* @Date 2025-04-15 15:17
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
public class LicenseAutoConfiguration {
|
|
||||||
|
|
||||||
private String licensePath;
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public LicenseVerifyProperties licenseVerifyProperties() {
|
|
||||||
return new LicenseVerifyProperties();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public LicenseInstallerBean licenseInstallerBean(LicenseVerifyProperties properties) {
|
|
||||||
return new LicenseInstallerBean(properties);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public LicenseManager licenseManager(LicenseVerifyProperties properties) {
|
|
||||||
return CustomLicenseManager.getInstance(properties);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -25,7 +25,7 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import top.continew.license.bean.LicenseInstallerBean;
|
import top.continew.license.bean.LicenseInstallerBean;
|
||||||
import top.continew.license.config.LicenseVerifyProperties;
|
import top.continew.license.autoconfigure.LicenseVerifyProperties;
|
||||||
import top.continew.license.dto.ConfigParam;
|
import top.continew.license.dto.ConfigParam;
|
||||||
import top.continew.license.dto.LicenseExtraModel;
|
import top.continew.license.dto.LicenseExtraModel;
|
||||||
import top.continew.license.keyStoreParam.CustomKeyStoreParam;
|
import top.continew.license.keyStoreParam.CustomKeyStoreParam;
|
||||||
@@ -37,10 +37,8 @@ import java.util.prefs.Preferences;
|
|||||||
/**
|
/**
|
||||||
* 客户端证书管理类(证书验证)
|
* 客户端证书管理类(证书验证)
|
||||||
*
|
*
|
||||||
* @Desc:
|
* @author loach
|
||||||
* @Author loach
|
* @since 1.2.0
|
||||||
* @ClassName top.continew.license.manager.ClientLicenseManager
|
|
||||||
* @Date 2025-04-11 15:00
|
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class CustomLicenseManager extends LicenseManager {
|
public class CustomLicenseManager extends LicenseManager {
|
||||||
@@ -50,6 +48,28 @@ public class CustomLicenseManager extends LicenseManager {
|
|||||||
private static volatile CustomLicenseManager INSTANCE;
|
private static volatile CustomLicenseManager INSTANCE;
|
||||||
private LicenseExtraModel extraModel;
|
private LicenseExtraModel extraModel;
|
||||||
|
|
||||||
|
private LicenseVerifyProperties properties;
|
||||||
|
|
||||||
|
private CustomLicenseManager(LicenseVerifyProperties properties) {
|
||||||
|
this.properties = properties;
|
||||||
|
// 初始化服务信息
|
||||||
|
initServerExtraModel();
|
||||||
|
// 解压证书和配置文件等
|
||||||
|
extractZip();
|
||||||
|
// 获取配置文件
|
||||||
|
ConfigParam configParam = getConfigParam();
|
||||||
|
// 安装证书
|
||||||
|
Preferences preferences = Preferences.userNodeForPackage(LicenseInstallerBean.class);
|
||||||
|
CipherParam cipherParam = new DefaultCipherParam(configParam.getStorePass());
|
||||||
|
KeyStoreParam publicKeyStoreParam = new CustomKeyStoreParam(LicenseInstallerBean.class, properties
|
||||||
|
.getStorePath() + File.separator + "clientLicense/publicCerts.keystore", configParam
|
||||||
|
.getPublicAlias(), configParam.getStorePass(), null);
|
||||||
|
LicenseParam licenseParam = new DefaultLicenseParam(configParam
|
||||||
|
.getSubject(), preferences, publicKeyStoreParam, cipherParam);
|
||||||
|
|
||||||
|
super.setLicenseParam(licenseParam);
|
||||||
|
}
|
||||||
|
|
||||||
public static CustomLicenseManager getInstance(LicenseVerifyProperties properties) {
|
public static CustomLicenseManager getInstance(LicenseVerifyProperties properties) {
|
||||||
if (INSTANCE == null) {
|
if (INSTANCE == null) {
|
||||||
synchronized (CustomLicenseManager.class) {
|
synchronized (CustomLicenseManager.class) {
|
||||||
@@ -61,36 +81,6 @@ public class CustomLicenseManager extends LicenseManager {
|
|||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String licensePath;
|
|
||||||
|
|
||||||
public CustomLicenseManager(LicenseVerifyProperties properties) {
|
|
||||||
if (properties == null || properties.getSavePath() == null) {
|
|
||||||
String os = System.getProperty("os.name");
|
|
||||||
if (os.toLowerCase().contains("windows")) {
|
|
||||||
this.licensePath = "D:/license/";
|
|
||||||
}
|
|
||||||
this.licensePath = "/data/license/";
|
|
||||||
} else {
|
|
||||||
this.licensePath = properties.getSavePath();
|
|
||||||
|
|
||||||
}
|
|
||||||
//初始化服务信息
|
|
||||||
initServerExtraModel();
|
|
||||||
//解压证书和配置文件等
|
|
||||||
extractZip();
|
|
||||||
//获取配置文件
|
|
||||||
ConfigParam configParam = getConfigParam();
|
|
||||||
//安装证书
|
|
||||||
Preferences preferences = Preferences.userNodeForPackage(LicenseInstallerBean.class);
|
|
||||||
CipherParam cipherParam = new DefaultCipherParam(configParam.getStorePass());
|
|
||||||
KeyStoreParam publicKeyStoreParam = new CustomKeyStoreParam(LicenseInstallerBean.class, getLicensePath() + "clientLicense/publicCerts.keystore", configParam
|
|
||||||
.getPublicAlias(), configParam.getStorePass(), null);
|
|
||||||
LicenseParam licenseParam = new DefaultLicenseParam(configParam
|
|
||||||
.getSubject(), preferences, publicKeyStoreParam, cipherParam);
|
|
||||||
|
|
||||||
super.setLicenseParam(licenseParam);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initServerExtraModel() {
|
private void initServerExtraModel() {
|
||||||
this.extraModel = ServerInfoUtils.getServerInfos();
|
this.extraModel = ServerInfoUtils.getServerInfos();
|
||||||
}
|
}
|
||||||
@@ -101,8 +91,8 @@ public class CustomLicenseManager extends LicenseManager {
|
|||||||
* @throws ZipException
|
* @throws ZipException
|
||||||
*/
|
*/
|
||||||
private void extractZip() {
|
private void extractZip() {
|
||||||
ZipFile config = new ZipFile(getLicensePath() + "clientLicense.zip");
|
ZipFile config = new ZipFile(properties.getStorePath() + File.separator + "clientLicense.zip");
|
||||||
File licenseDir = new File(getLicensePath() + "clientLicense");
|
File licenseDir = new File(properties.getStorePath() + File.separator + "clientLicense");
|
||||||
if (!licenseDir.exists()) {
|
if (!licenseDir.exists()) {
|
||||||
licenseDir.mkdir();
|
licenseDir.mkdir();
|
||||||
}
|
}
|
||||||
@@ -124,7 +114,8 @@ public class CustomLicenseManager extends LicenseManager {
|
|||||||
FileInputStream config = null;
|
FileInputStream config = null;
|
||||||
BufferedReader reader = null;
|
BufferedReader reader = null;
|
||||||
try {
|
try {
|
||||||
config = new FileInputStream(getLicensePath() + "clientLicense/clientConfig.json");
|
config = new FileInputStream(properties
|
||||||
|
.getStorePath() + File.separator + "clientLicense/clientConfig.json");
|
||||||
reader = new BufferedReader(new InputStreamReader(config, "UTF-8"));
|
reader = new BufferedReader(new InputStreamReader(config, "UTF-8"));
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
String temp = null;
|
String temp = null;
|
||||||
@@ -155,23 +146,14 @@ public class CustomLicenseManager extends LicenseManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取license文件位置
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private String getLicensePath() {
|
|
||||||
return this.licensePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 重写验证证书方法,添加自定义参数验证
|
* 重写验证证书方法,添加自定义参数验证
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected synchronized void validate(LicenseContent content) throws LicenseContentException {
|
protected synchronized void validate(LicenseContent content) throws LicenseContentException {
|
||||||
//系统验证基本参数:生效时间、失效时间、公钥别名、公钥密码
|
// 系统验证基本参数:生效时间、失效时间、公钥别名、公钥密码
|
||||||
super.validate(content);
|
super.validate(content);
|
||||||
//验证自定义参数
|
// 验证自定义参数
|
||||||
Object o = content.getExtra();
|
Object o = content.getExtra();
|
||||||
if (o != null && extraModel != null && o instanceof LicenseExtraModel) {
|
if (o != null && extraModel != null && o instanceof LicenseExtraModel) {
|
||||||
LicenseExtraModel contentExtraModel = (LicenseExtraModel)o;
|
LicenseExtraModel contentExtraModel = (LicenseExtraModel)o;
|
||||||
|
@@ -1,2 +1 @@
|
|||||||
top.continew.license.config.LicenseAutoConfiguration
|
top.continew.license.autoconfigure.LicenseVerifyAutoConfiguration
|
||||||
top.continew.license.Initializing.LicenseStarterInitializingBean
|
|
@@ -1,2 +0,0 @@
|
|||||||
license:
|
|
||||||
savePath: C:/license/
|
|
@@ -11,11 +11,17 @@
|
|||||||
|
|
||||||
<artifactId>continew-starter-license</artifactId>
|
<artifactId>continew-starter-license</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<description>ContiNew Starter license管理模块</description>
|
<description>ContiNew Starter license 管理模块</description>
|
||||||
<modules>
|
<modules>
|
||||||
<module>continew-starter-license-generate</module>
|
<module>continew-starter-license-generate</module>
|
||||||
<module>continew-starter-license-verify</module>
|
<module>continew-starter-license-verify</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- 核心模块 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>top.continew</groupId>
|
||||||
|
<artifactId>continew-starter-core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
</project>
|
</project>
|
Reference in New Issue
Block a user