Spring Boot项目中使用 TrueLicense 生成和验证License(附源码)

news2025/1/13 17:44:28

1、Linux

在客户linux上新建layman目录,导入license.sh文件,

[root@localhost layman]# mkdir -p /layman

license.sh文件内容:

#!/bin/bash
# 1.获取要监控的本地服务器IP地址
IP=`ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}'`
echo "IP地址:"$IP
#
# 2.获取默认网卡Mac地址
mac_address=`cat /sys/class/net/$(ip route show default | awk '/default/ {print $5}')/address`
echo "默认网卡Mac地址:"$mac_address
#
# 3.获取CPU序列号
CPU_serial_number=`dmidecode -t 4 | grep ID |sort -u |awk -F': ' '{print $2}'`
echo "CPU序列号:"$CPU_serial_number
#
# 4.获取主板序列号
Motherboard_serial_number=`sudo dmidecode -s system-serial-number`
echo "主板序列号:"$Motherboard_serial_number

执行sh文件,会在该目录下生成license.log

[root@localhost layman]# sh license.sh 2>&1 | tee license.log

在这里插入图片描述

2、Windows

创建获取IP,mac,CPU,主板信息.bat文件,双击运行,会在D盘生成ComputerInfos.txt文件。
.bat文件内容如下:

@echo off
echo 开始获取本机IP、MAC、CPU序列号、主板序列号信息,请稍等......
 
if  exist D:\ComputerInfos.txt (
echo ===================本机已删除旧的信息文件,请重新运行获取!!!==================
del D:\ComputerInfos.txt 
) else (

rem 查看本机IP信息
echo 1-本机IP信息----------------------------------------------------------------------------:>>D:\ComputerInfos.txt 
 ipconfig>>D:\ComputerInfos.txt 
 
rem 查看本机mac信息
echo 2-本机mac信息---------------------------------------------------------------------------:>>D:\ComputerInfos.txt 
getmac>>D:\ComputerInfos.txt 

rem 查看本机CPU信息
echo 3-本机CPU序列号-----------------------------------------------------------------------:>>D:\ComputerInfos.txt 
 wmic cpu get processorid>>D:\ComputerInfos.txt 
 
rem 4-查看本机主板信息
echo 4-主板序列号----------------------------------------------------------------------------:>>D:\ComputerInfos.txt
wmic baseboard get SerialNumber>>D:\ComputerInfos.txt 
echo "===================本机信息保存在 D:\ComputerInfos.txt================ "
)
pause

步骤

1、使用JDK自带的 keytool 工具生成公私钥证书库:

在C:\盘中新建layman目录,在 C:\layman 中cmd执行如下命令:
假如我们设置公钥库密码为:public_password1234,私钥库密码为:private_password1234,则生成命令如下:

#生成命令
keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.keystore" -storepass "public_password1234" -keypass "private_password1234" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN"

#导出命令
keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "public_password1234" -file "certfile.cer"

#导入命令
keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "public_password1234"

上述命令执行完成之后,会在当前路径下生成三个文件,分别是:privateKeys.keystore、publicCerts.keystore、certfile.cer。其中文件certfile.cer不再需要可以删除,文件privateKeys.keystore用于当前的 ServerDemo 项目给客户生成license文件,而文件publicCerts.keystore则随应用代码部署到客户服务器,用户解密license文件并校验其许可信息。

2、为客户生成license文件:

将LicenseDemo代码拉取到本地(联系作者获取源码),部署项目LicenseDemo,启动ServerDemo服务。
使用postman工具:
1、get请求获取客户机的ip、mac、cpu序列号、主板串行号等信息

get
http://127.0.0.1:7000/license/getServerInfos
Content-Type      application/json;charset=UTF-8

在这里插入图片描述
2、post请求生成license.lic文件

post
http://127.0.0.1:7000/license/generateLicense
请求时需要在Header中添加一个 Content-Type ,其值为:application/json;charset=UTF-8。参数示例如下:
Content-Type      application/json;charset=UTF-8
{
	"subject": "layman_license",
	"privateAlias": "privateKey",
	"keyPass": "private_password1234",
	"storePass": "public_password1234",
	"licensePath": "C:/layman/license.lic",
	"privateKeysStorePath": "C:/layman/privateKeys.keystore",
	"issuedTime": "2023-04-18 00:00:00",
	"expiryTime": "2023-04-24 10:20:00",
	"consumerType": "User",
	"consumerAmount": 1,
	"description": "这是证书描述信息",
	"licenseCheckModel": {
		"ipAddress": [ "192.168.3.57","192.168.101.1"],
		"macAddress": ["00-50-56-C0-00-08", "E0-E1-A9-9D-35-C8"],
		"cpuSerial": "BFEBFBFF000906EA",
		"mainBoardSerial": "/5H6MJ23/CNWS2009BK01DR/"
	}
}

在这里插入图片描述
如果请求成功,那么最后会在 licensePath 参数设置的路径生成一个 license.lic 的文件,这个文件就是给客户部署代码的服务器许可文件。

3、校验license:

ClientDemo服务中license-config.properties参数配置如下:

#License相关配置
license.subject=layman_license   #主体 - 注意主体要与生成证书的主体一致一致,不然验证通过不了
license.publicAlias=publicCert   #公钥别称
license.storePass=public_password1234   #访问公钥的密码
license.licensePathWin=C:/layman/license.lic   #license位置
license.publicKeysStorePathWin=C:/layman/publicCerts.keystore   #公钥位置
license.licensePathLinux=/layman/license.lic
license.publicKeysStorePathLinux=/layman/publicCerts.keystore

启动ClientDemo服务,访问 http://127.0.0.1:7080/login。
如果证书失效,这会出现以下报错。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1104945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人脸写真FaceChain的简单部署记录(一)

由【让你拥有专属且万能的AI摄影师AI修图师——FaceChain迎来最大版本更新】这篇文章开始出发进行人脸写真的尝试,笔者之前modelscope申请过免费额度,这里有适配的GPU环境可以提供测试。 但是很难抢到GPU资源,需要等待很久,可能才…

路由侠内网穿透:轻松访问公司内部OA、ERP等系统,提高工作效率

前言: 本文介绍如何通过路由侠内网穿透,从外部网络环境(比如异地和家中网络)访问公司内网的 OA、ERP 等系统。 公司内网的 OA、ERP 以及其他类型的办公系统, 通常有两种形态,一种是网站形态,一种是单独的应…

开源IT资产管理系统Snipe-IT

本文完成于 8 月初,正好网友 chenlit 在找用于管理固定资产容器和套件,不知道 Snipe-IT 是否能满足他的需求; 什么是 Snipe-IT ? Snipe-IT 是一个用 PHP 编写的免费开源 IT 资产管理系统。Snipe-IT 专为 IT 资产管理而设计&#x…

Spring后置处理器之AutowiredAnnotationBeanPostProcessor

抽象类InstantiationAwareBeanPostProcessorAdapter没有实现的接口方法,其子类必须实现。 抽象类InstantiationAwareBeanPostProcessorAdapter可以使得类InstantiationAwareBeanPostProcessorAdapter选择性实现接口部分抽象方法。

新年学新语言Go之二

一、前言 上文 新年学新语言Go之一讲了Go的牛逼之处,给自己找一个学习的理由,但是学任何一门语言基础语法还是要先掌握,虽然这是一件很枯燥的事。 二、环境搭建与HelloWorld 1、配置环境 从https://golang.google.cn/dl/下载Mac环境Go最新…

干洗店小程序,上门洗鞋洗衣下单算软件开发;

干洗店小程序,上门洗鞋洗衣软件; 有多个小程序开发案例 洗衣店小程序 是一款适用于洗衣店、干洗店等洗鞋店小程序; 干洗店小程序功能有: 1.(支持上门取送、送货到店、寄存网点、智能衣柜四种下单方式) 用户下单-上门取货拍照-送达门店工厂-入…

页面的动静分离

动静分离概念: 访问静态()和动态页面(tomcat)分开静态页面,由nginx提供服务,静态页面由tomcat提供服务。实现动态和静态页面负载均衡。 实验需求: 1台nginx代理 192.168.10.10 四层代理 2台nginx 提供静态页面 192.168.10.2…

四维轻云主要功能介绍

《四维轻云》是一款轻量化的地理空间数据管理云平台,支持地理空间数据的在线管理、编辑以及分享。平台有项目管理、数据上传、场景搭建、发布分享、素材库等功能模块,支持多用户在线协作管理,实现了轻量化、便捷化的空间数据应用。 一、发布…

详解使用sklearn实现一元线性回归和多元线性回归

[Open In Colab] 文章目录 1. 线性回归简介2. 使用sklearn进行一元线性回归3. 线性回归的coef_参数和intercept_参数4. 使用sklearn实现多元线性回归4.1 利用PolynomialFeatures构造输入4.2 进行多元线性回归 5. 总结 import numpy as np import matplotlib.pyplot as plt1. 线…

基于SSM的洗衣店管理系统

基于SSM的洗衣店管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 管理员界面 预约列表 种类管理 用户界面 摘要 洗衣店管理系统是一种利用现代技…

java 通过Tess4j 读取图片中的文字

Maven依赖导入Tess4j <!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j --><dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.4</version></de…

UI设计师岗位的基本职责八篇(合集)

UI设计师岗位的基本职责1 职责&#xff1a; 1. 负责公司互联网产品app、web、h5等的用户界面设计工作; 2. 负责运营活动相关的平面及视频设计支持; 3. 负责完成产品相关的界面、图标、动画等的图形界面设计&#xff0c;并参与制定、编写产品视觉设计规范文档; 4. 整理和分…

音频抓取代码示例

以下是一个使用DefaultsKit库的简单爬虫程序&#xff0c;用于爬取音频。代码中使用了https://www.duoip.cn/get_proxy的API获取代理服务器。 import Foundation import DefaultsKit ​ let url "https://www.douban.com/music" // 目标网站URL let proxyUrl "…

代码随想录算法训练营第二十五天丨 回溯算法part03

39. 组合总和 思路 题目中的无限制重复被选取&#xff0c;提示&#xff1a;1 < candidates[i] < 200。 本题和77.组合 (opens new window)&#xff0c;216.组合总和III (opens new window)的区别是&#xff1a;本题没有数量要求&#xff0c;可以无限重复&#xff0c;但…

【二层环路】交换机二次原路排查思路

以太网交换网络中为了提高网络可靠性&#xff0c;通常会采用冗余设备和冗余链路&#xff0c;然而现网中由于组网调整、配置修改、升级割接等原因&#xff0c;经常会造成数据或协议报文环形转发&#xff0c;不可避免的形成环路。如图1所示&#xff0c;三台设备两两相连就会形成环…

[解决]修复 win 32/64 位操作系统上的 PyAudio pip 安装错误

一、说明 Python3.7 无法安装pyaudio&#xff0c;度娘的结果基本都是这个&#xff0c;pip install pyaudio.....然而十有八九你的电脑不买账&#xff0c;会报错。本篇将介绍如何在win10anaconda安装pyaudio。 二、过程叙述 我有一台 Windows 10 电脑&#xff0c;我想安装 pyau…

本地jar打包成maven依赖,上传到私服

本地打包jar成maven依赖 mvn install:install-file -Dfile“\oss\xmlBeans\rvdMsgWrapper.jar” -DgroupId“hk.gov.xmlBeans” -DartifactId“noNamespace” -Dversion“1.0.0” -Dpackaging“jar” 上传到私服 登录进入到Upload 页面 上传 上传完成&#xff0c;到仓库查看…

LED路灯浪涌保护器行业应用解决方案

LED路灯是一种利用LED发光二极管作为光源的节能环保的城市道路照明设备。LED路灯具有寿命长、光效高、色温可调、无污染等优点&#xff0c;已经成为城市道路照明的主流选择。 然而&#xff0c;LED路灯也面临着一些问题&#xff0c;其中之一就是雷击浪涌的威胁。雷击浪涌是指由…

用Python做一个文件夹整理工具

文章目录 简介文件夹对话框文件映射组件完整组件 简介 我们的目的是做一个像下面这样的工具&#xff0c;前面两个输入框&#xff0c;用于输入源路径和目标路径&#xff0c;下面的图片、视频、音乐表示在目标路径中创建的文件夹&#xff0c;后面的文件后缀&#xff0c;表示将这…

HTML 表格及练习

表格 概述 表格是一种二维结构&#xff0c;横行纵列。 由单元格组成。 表格是一种非常“强” 的结构&#xff1a; 每一行有相同的列数&#xff08;单元格&#xff09;&#xff0c;每一列有相同的行数&#xff08;单元格&#xff09; 同一列的单元格&#xff0c;宽度&#…