当前位置: 首页 > news >正文

TrueLicense实现授权管理

1、生成前准备
在生成授权文件前,首先需要密钥对插入:密钥对分为公钥与私钥,私钥需要本地储存不泄露,公钥需要对外提供;私钥内部包含证书,对于授权文件进行数字签名,相当于加密的步骤,公钥则是在验证步骤时使用。生成密钥对的工具有很多,鉴于开发过程中团队使用的都是JAVA,使用了JDK自带的KeyTool作为生成工具。在JDK中1)创建私钥
打开CMD,在系统环境变量已配置java相关后,可以使用。语句示例keytool -genkey -alias privatekey -keystore privateKeys.store -validity 3650
1
keytool -genkey -alias 密钥别称 -keystore 储存位置,上面默认储存在cmd当前路径下 -validity 密钥有效日期之后会需要输入密钥的访问密码,务必留好记录密码规则是英文数字与符号,6位以上。输入并重复密码后,会输入相关信息,可以比较随意,目前没有发现问题。2)导出证书
keytool -export -alias privatekey -file certfile.cer -keystore privateKeys.store
1
keytool -export -alias 密钥别名 -file 导出的证书文件 -keystore 密钥位置3)导入证书并生成公钥
keytool -import -alias publiccert -file certfile.cer -keystore publicCerts.store
1
keytool -import -alias 公钥别称 -file 导入的证书文件 -keystore 公钥位置以上三步全部完成后,会在本地生成3个文件privateKeys.keystore:私钥,不能泄露。
publicCerts.keystore:公钥,配合license进行授权信息的校验。
certfile.cer:证书,已导入公钥,无用。记录好公钥别称,私钥别称,公钥私钥密码等所输入的信息 

LicenseVerify类实现方法 

package com.meslog.system.run.license;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 java.io.File;
import java.text.DateFormat;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.prefs.Preferences;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.meslog.commin.core.utils.SecurityUtils;
public class LicenseVerify {private static Logger logger = LogManager.getLogger(LicenseVerify.class);public synchronized LicenseContent install(LicenseVerifyParam param) {LicenseContent result = null;DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {LicenseManager licenseManager = LicenseManagerHolder.getInstance(initLicenseParam(param));licenseManager.uninstall();result = licenseManager.install(new File(param.getLicensePath()));// WcsUtil.notification(MessageFormat.format("证书有效期:{0} - {1}", new Object[] { format.format(result.getNotBefore()), format.format(result.getNotAfter()) }), NotificationTypeEnum.INFO);logger.info(MessageFormat.format("证书安装成功,证书有效期:{0} - {1}", new Object[] { format.format(result.getNotBefore()), format.format(result.getNotAfter()) }));} catch (Exception e) {logger.error("1111证书安装失败!", e);} return result;}public boolean verify() {LicenseManager licenseManager = LicenseManagerHolder.getInstance(null);DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {LicenseContent licenseContent = licenseManager.verify();logger.info(MessageFormat.format("证书校验通过,证书有效期:{0} - {1}", new Object[] { format.format(licenseContent.getNotBefore()), format.format(licenseContent.getNotAfter()) }));return true;} catch (Exception e) {logger.error("2222证书校验失败!", e);logger.error(SecurityUtils.encryptPassword("123"));logger.error("11111证书校验失败!", e);return true;} }private LicenseParam initLicenseParam(LicenseVerifyParam param) {Preferences preferences = Preferences.userNodeForPackage(LicenseVerify.class);DefaultCipherParam defaultCipherParam = new DefaultCipherParam(param.getStorePass());CustomKeyStoreParam customKeyStoreParam = new CustomKeyStoreParam(LicenseVerify.class, param.getPublicKeysStorePath(), param.getPublicAlias(), param.getStorePass(), null);return (LicenseParam)new DefaultLicenseParam(param.getSubject(), preferences, (KeyStoreParam)customKeyStoreParam, (CipherParam)defaultCipherParam);}
}


 

相关文章:

TrueLicense实现授权管理

1、生成前准备 在生成授权文件前,首先需要密钥对插入:密钥对分为公钥与私钥,私钥需要本地储存不泄露,公钥需要对外提供;私钥内部包含证书,对于授权文件进行数字签名,相当于加密的步骤&#xff0…...

好用的样式动画库集合(css、js)

文章目录 前言一、Animate.css二、Anime.js三、CSShake四、Hover.css五、AniJS六、Animista七、Tachyons-animate八、Sequence.js九、Infinite十、OBNOXIOUS.CSS十一、MOTION UI十二、Keyframes.app十三、AnimXYZ十四、Whirl十五、Hamburgers十六、Vivify十七、Magic Animation…...

pandas教程:时区计数 USA.gov Data from Bitly USA.gov数据集

文章目录 Chapter 14 Data Analysis Examples(数据分析实例)14.1 USA.gov Data from Bitly(USA.gov数据集)1 Counting Time Zones in Pure Python(用纯python代码对时区进行计数)2 Counting Time Zones wit…...

野火霸天虎 STM32F407 学习笔记(六)系统时钟详解

STM32 中级 前言 仍然是学习自野火F407网课。 启动文件详解 作用: 初始化堆栈指针 SP_initial_sp初始化 PC 指针 Reset_Handler初始化中断向量表配置系统时钟调用 C 库函数 _main 初始化用户堆栈,从而最终调用 main 函数去到 C 的世界 栈&#xff…...

uni-app+vue3 封装全局函数(详细完整的方法)

在uni-app和vue3中,我们可以封装全局函数来复用代码。以下是详细的步骤: 首先,我们需要在main.js文件中引入我们封装的全局函数。这样我们就可以在整个项目中使用这些函数。 import globalFunctions from ./globalFunctionsVue.prototype.$g…...

游戏开发原画的设计方法

游戏原画设计是游戏开发中至关重要的一环,因为它直接影响到游戏的视觉吸引力和用户体验。以下是一些常见的游戏原画设计方法,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 理解游戏概念&…...

力扣labuladong一刷day19天花式遍历

力扣labuladong一刷day19天花式遍历 文章目录 力扣labuladong一刷day19天花式遍历一、48. 旋转图像二、54. 螺旋矩阵三、59. 螺旋矩阵 II 一、48. 旋转图像 题目链接:https://leetcode.cn/problems/rotate-image/ 思路:把矩阵向右旋转90度,要…...

自动化部署 扩容openGauss —— Ansible for openGauss

前言 大家好,今天我们为大家推荐一套基于Ansible开发的,自动化部署及扩容openGauss的脚本工具:Ansible for openGauss(以下简称 AFO)。 通过AFO,我们只需简单修改一些配置文件,即可快速部署多种…...

C#多线程创建及线程的同步

需求:有时为了能分时的调用多个任务运行,因此需要考虑多线程的编程方式 操作步骤如下: 1)创建线程并开启线程 Thread thread0 new Thread(() > DoWork0(0)); thread0.Start(); 2)编写线程函数 static void Do…...

MOM系统功能清单

什么是MOM系统? MOM系统是制造运营管理(Manufacturing Operation Management)的缩写。它是指通过协调管理企业的人员、设备、物料和能源等资源,把原材料或零件转化为产品的活动。MOM系统集成了生产计划、库存管理、生产调度、质量…...

ARM Cortex-M核的内核态,用户态

首先,用户态和内核态是从操作系统层面上来划分的,如果没有操作系统,我可以直接运行在特权模式下,并使用特权指令。在这种情况下,我将负责管理和控制系统资源,执行关键操作,以及确保系统的安全性…...

flex布局实战之自动填充剩余

案例目标 文字部分自适应并且居中 图中是一个弹窗&#xff0c;我现在使用flex的布局来实现&#xff0c;标题和关闭按钮。因为是uni-app,所以标签是view 。你可以自行替换为 代码 <view class"popup-box"><view class"title"><view class&…...

【LeetCode】203. 移除链表元素

203. 移除链表元素 难度&#xff1a;简单 题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff…...

IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?(已解决)

方案&#xff1a;替换创建项目的源 我们只知道IDEA页面创建Spring项目&#xff0c;其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https://start.spring.io/或者http://start.springboot.io/替换为 https://start.aliyun.com/...

Vue生命周期详解

以下是 Vue 生命周期钩子函数分别做了什么事情的详细说明 详细说明 beforeCreate&#xff08;创建前&#xff09;&#xff1a;在实例初始化之前调用。此时&#xff0c;实例的数据观测 (data observer)、属性和方法的运算&#xff0c;以及事件配置等内部设置都已完成&#xff0…...

政务大数据与资源平台建设解决方案:PPT全文75页,附下载

关键词&#xff1a;智慧政务解决方案&#xff0c;大数据解决方案&#xff0c;数据中心解决方案&#xff0c;数据治理解决方案 一、政务大数据与资源平台建设背景 1、政务大数据已成为智慧城市建设的必要基础 为响应国家不断加快5G基建、大数据、人工智能等新型基础设施建设布…...

环境监测传感器守护我们的地球

随着人类活动的不断增加&#xff0c;环境问题日益凸显。为了更好地保护我们的地球&#xff0c;环境监测成为了一项非常重要的任务。而在这个领域&#xff0c;传感器技术发挥着至关重要的作用。今天&#xff0c;我们就来聊聊WX-WQX12 环境监测传感器。 环境监测传感器是一种能够…...

PHP 循环控制 学习资料

PHP 循环控制 在 PHP 中&#xff0c;循环控制语句用于控制循环的执行流程&#xff0c;包括跳出循环、跳过当前迭代等操作。以下是 PHP 中常用的循环控制语句的介绍和示例&#xff1a; break 语句 break 语句用于立即跳出当前循环&#xff0c;并继续执行循环之后的代码。 示…...

Unity 关于生命周期函数的一些认识

Unity 生命周期函数主要有以下一些&#xff1a; Awake(): 在脚本被加载时调用。用于初始化对象的状态和引用。 OnEnable(): 在脚本组件被启用时调用。在脚本组件被激活时执行一次&#xff0c;以及在脚本组件被重新激活时执行。 Reset(): 在脚本组件被重置时调用。用于重置脚本…...

大数据学习(26)-spark核心总结

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

如何永久备份微信聊天记录?这个免费工具让你轻松掌握数字记忆的主动权

如何永久备份微信聊天记录&#xff1f;这个免费工具让你轻松掌握数字记忆的主动权 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Tr…...

IINA:macOS原生级视频播放体验的现代化解决方案

IINA&#xff1a;macOS原生级视频播放体验的现代化解决方案 【免费下载链接】iina The modern video player for macOS. 项目地址: https://gitcode.com/gh_mirrors/iin/iina 在macOS平台上寻找一款既能提供专业级播放功能&#xff0c;又保持系统原生体验的视频播放器&a…...

猫抓Cat-Catch:如何轻松实现网页视频资源嗅探与一键下载

猫抓Cat-Catch&#xff1a;如何轻松实现网页视频资源嗅探与一键下载 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法下载网页视频而烦恼…...

Python微信机器人终极指南:5分钟构建你的智能自动化助手

Python微信机器人终极指南&#xff1a;5分钟构建你的智能自动化助手 【免费下载链接】WechatBot 项目地址: https://gitcode.com/gh_mirrors/wechatb/WechatBot 还在手动处理微信消息吗&#xff1f;每天重复的群消息回复、客户咨询和通知发送耗费了你大量时间。今天&am…...

忍者像素绘卷Ubuntu系统部署全指南:从环境配置到服务上线

忍者像素绘卷Ubuntu系统部署全指南&#xff1a;从环境配置到服务上线 1. 前言&#xff1a;为什么选择这套方案 最近在帮朋友部署一个AI绘画项目时&#xff0c;发现很多教程要么太简单要么太复杂。今天给大家分享一个经过实战检验的Ubuntu部署方案&#xff0c;特别适合"忍…...

如何高效下载漫画:comics-downloader 终极使用指南

如何高效下载漫画&#xff1a;comics-downloader 终极使用指南 【免费下载链接】comics-downloader tool to download comics and manga in pdf/epub/cbr/cbz from a website 项目地址: https://gitcode.com/gh_mirrors/co/comics-downloader comics-downloader 是一款专…...

Healthsea:基于spaCy的补剂效果分析管道

Healthsea&#xff1a;用于探索健康补剂效果的端到端spaCy管道 2021年12月15日 • 38分钟阅读 博客&#xff1a;spaCy, Prodigy | 命名实体识别 | 文本分类 | 生物医学 利用机器学习和自然语言处理创造更好的健康获取方式。本文介绍了Healthsea的开发历程&#xff0c;这是一个端…...

GraalVM内存优化不是玄学:基于237个生产镜像样本的统计分析,TOP5内存膨胀根因与对应Gradle/Maven加固配置

第一章&#xff1a;GraalVM静态镜像内存优化的认知重构传统JVM应用的内存模型建立在运行时动态类加载、JIT编译与垃圾回收协同工作的假设之上&#xff0c;而GraalVM静态原生镜像&#xff08;Native Image&#xff09;彻底颠覆了这一范式——它在构建阶段完成全部可达性分析、类…...

PHP Swoole配置全栈实战(生产环境零故障配置手册)

第一章&#xff1a;PHP Swoole配置全栈实战&#xff08;生产环境零故障配置手册&#xff09;在高并发、低延迟的现代 Web 服务架构中&#xff0c;Swoole 已成为 PHP 生产环境的核心运行时引擎。本章聚焦于可落地、可监控、可回滚的全栈配置实践&#xff0c;覆盖从内核参数调优到…...

你的SSH密钥可能已经过期了档

引言 在现代软件开发中&#xff0c;性能始终是衡量应用质量的重要指标之一。无论是企业级应用、云服务还是桌面程序&#xff0c;性能优化都能显著提升用户体验、降低基础设施成本并增强系统的可扩展性。对于使用 C# 开发的应用程序而言&#xff0c;性能优化涉及多个层面&#x…...