SpringBoot定时器+文件Md5码实现文件变动检测
一、前言
在上上一篇中,博主基于开源truelicense组件,写了一个demo放到了github上,传送门,里面的功能主要有三个:
(1)creator模块:通过秘钥对+参数生成证书lic文件
(2)基于lic文件进行证书安装
(3)verify模块:结合系统应用对证书中的参数进行解析,并通过数值比较来决定系统是否可用;
a.如系统可用期限是否到期,
b.如系统当前注册的人数是否超过了证书中规定的最大用户数量
c.如系统部署的机子ip和mac地址是否在证书圈定的数值内等
在本篇中,我将再一次以license为例(不过本篇的lic例子是假的,模拟出来的,主要为了便捷的表达最终的效果),来讲述一下如何动态的给用户提供lic文件,而不用重启整个服务重新再安装一遍证书
二、场景
软件证书license是有偿软件或业务系统必不可少的一道门槛,如果你想对自己的产品加以使用限制,那么拥有一个lic文件是一件很有必要的事情,至于实现方式,有很多种,至于限制方式,也有很多,天马行空,只要你敢想!
我这个人有个习惯,写博客撸代码,一定要结合业务场景来,我不会为了纯粹写代码而更博客,那样我就机械般的复制粘贴好了;但那会让我觉得更一篇博文是没有任何感情色彩的,反而会让我觉得反感,还不如不更!
昨天,配合测试人员把lic的功能走了一遍,其实功能不复杂,就是在一台机子上一键部署我们的xx产品,然后带lic的那种,限制用户的使用,比如登录的时候验证下有效期、注册的时候验证一下是否超过了最大用户数量;在这里,博主要啰嗦一句了,因为这个真的很重要,很重要,很重要:写代码一定要有灵魂和远见性,能做成jar包通用组件的就扔到maven仓库里,不要功能大杂烩,该拆的拆,该提的提,该分支维护的分支维护,一定要让一个jar包充分发挥它自身的价值!
扯回来,虽然lic功能是ok的,但是测试过程发现一个问题,每一次重新生成lic文件,我们的测试人员都要重启一把产品才能使新的lic重新安装生效。我就去了,这就很恶心了,用户又不关心tomcat是什么对吧,用户只需要覆盖lic就行,管它后台程序是不是重新读取安装呢,怎么办?好办,加个定时器,读秒的那种去读lic文件的md5串,只要文件变动,md5必然改变,基于md5的前后比较,来自动实现证书的重新安装,ok,就是这么easy,下面走代码,实现一波!
三、项目结构
主要代码片段如下:
@Autowiredprivate LicenseInstall licenseInstall;@Value("${gx.license.file.path}")private String licPath;/**文件唯一身份标识 == 相当于人类的指纹一样*/private static String md5 = "";/**5秒检测一次,不能太快也不能太慢,自己体会*/@Scheduled(cron = "0/5 * * * * ?")protected void timer() throws Exception {String readMd5 = FileUtils.getMd5(licPath);if(FileTimer.md5 == null || "".equals(FileTimer.md5)){FileTimer.md5 =readMd5;}// 不相等,说明lic变化了if(!readMd5.equals(FileTimer.md5)){LoggerHelper.info("========证书安装开始========");licenseInstall.install(licPath);LoggerHelper.info("========证书安装结束========");FileTimer.md5 = readMd5;}}
瞅一眼,SysConfig和LicenseParam的定义:
再看一眼lic.txt的内容(注意,内容是模拟的,正常来说是加密的字节):
{"issuedTime":"2019-11-01 08:00:00","expiryTime":"2019-11-05 08:00:00","maxUsers":10
}
最后来一眼,文件的md5指纹串(我就这么称呼了啊,比较直白好懂)是如何获取的:
ok,万事俱备,只欠东风,准备测试一波!文末demo会放到github上,供参考!
四、License文件变动测试
(1)启动项目
Tomcat started on port(s): 8081 (http) with context path ''
启动的很平静,因为我们设置的定时器检测的是lic文件的变动,第一次启动项目时,是先初始化md5值,因此不会有输出。
(2)我们修改一下lic中的过期时间,我们往前调一下
只要你保存,定时器会如约的(5s一次)检测到lic文件内容的变动,从而触发lic的重新安装,由于过期时间比当前时间还要前,所以证书安装是失败的:
所以,我们会在控制台看到如下异常输出:
(3)我们正常一点,把时间改大一点,改到2020-11-03号,同时把最大用户数的10改成3(注意系统当前最大用户是5)
(4)我们调一下接口验证下证书的用户人数限制是否起作用了
五、GitHub地址
地址:https://github.com/kobeyk/file-changing
SpringBoot定时器+文件Md5码实现文件变动检测相关推荐
- 根据文件MD5删除重复文件
根据文件MD5删除重复文件,仅保留一份文件: ```shell find . -type f -exec md5sum {} \; | sort -k 1 | awk 'a[$1]++{print $ ...
- 文件md5码怎么生成_Linux 系统文件校验方法--MD5,SHA1,PGP,SHA256,SHA512
MD5校验 原理:对文件进行MD5 Hash,求出文件的MD5哈希值,通过下载后文件MD5哈希值和发布者提供的MD5哈希值是否一致来判断文件是否在发布者发布之后被篡改过. [root@centos-1 ...
- 如何用Python和hashlib实现文件MD5码的批量存储
目录 简介: 源代码: 源代码说明: 效果如下所示: 简介: 可以考虑以下几个可能的应用: 如果你需要对文件进行校验或验证,你可以使用MD5码来检查文件是否被篡改或损坏. 如果你需要对文件进行分类或去 ...
- Java 获取文件md5值校验文件
假如我们想校验两个文件网络传输中是否改变了,或者校验两个文件是否一致可以使用md5校验. 代码: import java.io.FileInputStream; import java.io.Inpu ...
- 【windows】查看文件md5码
CMD certutil -hashfile [filepath] [type] filepath为文件路径 type为选择的加密算法MD2 MD4 MD5 SHA1 SHA256 SHA384 SH ...
- python md5解密_python 生成文件MD5码
pymd5.py的代码如下: #-*-coding:utf-8-*- ''' Created on 2012-5-25 @author: kanpiaoxue ''' import hashlib i ...
- html批量转码工具,文件转码工具(文件GBK与UTF编码批量转码工具)
这是一个将批量的txt文件转换成Unicode编码的工具,转换的速度快,使用简单. 什么是Unicod编码? Unicode(统一码.万国码.单一码)是一种在计算机上使用的字符编码.Unicode 是 ...
- HTML5 file api读取文件的MD5码工具
1.工具的用途:用HTML5 file api读取文件的MD5码.MD5码在文件的唯一性识别上有很重要的应用,业内常用MD5进行文件识别.文件秒传.文件安全性检查等: 2.适用性:IE.Chrome皆 ...
- shell之旅--将目录下的文件重命名为md5码+后缀名
前两天要做一个功能,由客户端上传一个zip包,服务端对这个zip包进行解压,并且对这个文件夹下的所有文件进行md5,并将文件重命名为文件md5码+文件后缀,保存原文件名与md5码之间的映射关系.想想这 ...
最新文章
- mysql索引排序算法_MySQL中利用索引对数据进行排序的基础教程
- 最新 主流笔记本cpu列表
- python语音分割_用7行Python代码构建自己的有声读物
- 对未来计算机的畅想初中英语,初中英语期中考试,作文停电一小时,在北京……在上海……在威海…….doc...
- CentOs6.6安装Python3
- java 图像渲染_对具有大量图像的视图执行本机渲染性能
- UNIX网络编程——常用服务器模型总结
- [Struts]使用tiles管理界面遇到困难
- 耳机插在主机后面声音很小,音频软件测试很大声音,如何解决电脑前面耳机没声音后面却正常的问题...
- 2021 年中国城市发展规划数据源
- pytorch和python的区别_Keras和PyTorch的视觉识别与迁移学习对比
- 数据库的基本命令 创建数据库 创建表 插入数据
- 巴特沃斯滤波器、切比雪夫、椭圆滤波
- 电脑重装系统演示,惠普电脑怎么进入bios,一看就会懂的重装方法
- 电脑装双系统有什么坏处?可不只是速度变慢!
- 创建优化的Go镜像文件以及踩过的坑
- 解决keras安装之后无法使用的问题
- 【8.23模拟赛T1.1296】城墙【贪心】
- PowerDesigner15.5 逆向生成mysql数据PDM文件
- 德国kit计算机硕士申请条件,卡尔斯鲁厄理工学院研究生申请条件是怎样的?