smart-license 是一款用于安全加固的开源项目。 主要服务于非开源产品、商业软件、具备试用功能的付费软件等,为软件提供授权制的使用方式。
一、适用场景
- 非开源产品、商业软件、收费软件。
- 限制产品的传播性,每个客户拥有专属 License。
- 同一款软件发行包根据 License 的不同提供不同的服务能力。
- 限定软件授权时效。
二、产品特色
- 开源,代码完全公开,License的生成原理是透明的。
- 易用,秒级生成License。
- 安全,生成的 License 在一定程度上具备防篡改能力,破解难度大。
三、更新说明
这是一个颠覆性的版本,为了给用户提供更好的使用体验。我们果断的剔除了 1.x 版本中的 License 生成功能,并提供了 License 的在线申请服务,整个过程仅需几秒钟。
在 smart-license 2.0 中,我们将协议规则调整为语言无关的模式。这意味着除了Java,未来我们还能为其他编程语言提供同等的授权服务。
3.1 Shield.盾
这是License在线申请服务的产品名,寓意着:守护。
你可以通过我们的使用文档连接找到该服务地址。在此感谢为我们提供服务器的朋友,以及前端框架layui-vue作者给予的技术支持。
3.2 客户端
客户端仅做了少许的优化,老用户稍加调整便可适配过来,不过原有的License 文件需要重新生成。
<dependency>
<groupId>org.smartboot.license</groupId>
<artifactId>license-client</artifactId>
<version>2.0</version>
</dependency>
示例程序:
private void loadLicense(Properties properties) {
1️⃣ License license = new License(entity -> EnterprisePlugin.this.uninstall(),10);
2️⃣ try (InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("License.shield")) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int size;
while ((size = inputStream.read(bytes)) > 0) {
byteArrayOutputStream.write(bytes, 0, size);
}
3️⃣LicenseEntity entity = license.loadLicense(byteArrayOutputStream.toByteArray());
4️⃣properties.load(new ByteArrayInputStream(entity.getData()));
System.out.println(properties);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
- 初始化 License 客户端。注册license过期后的回调逻辑,以及过期状态下的回调重复触发频率(单位:秒)。
- 加载 License 文件流。
- 解析 License 进行合法性校验,并获取授权内容。
- 基于授权内容进行软件运行时的配置初始化。
四、最后
我们寄希望于用技术的力量来守护技术人的权益,所以创造了 smart-license 。
但因某些因素致使该项目长期处于托管状态,在此向曾经关注该项目,以及前来技术咨询的朋友说是抱歉。
我们无法承诺会持续维护该项目,也没有计划在社区提供免费的咨询服务。
如果有朋友愿意为这个项目贡献一份力量(包括且不限于:策略优化、文档、推广运营、付费咨询),在此表示非常的欢迎和感谢!
仓库:https://gitee.com/smartboot/smart-license
文档:https://smartboot.gitee.io/smart-license/ (内有 Shield.盾 的跳转连接)