一、前言

        在上上一篇中,博主基于开源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码实现文件变动检测相关推荐

  1. 根据文件MD5删除重复文件

    根据文件MD5删除重复文件,仅保留一份文件: ```shell find . -type f -exec md5sum {} \; | sort -k 1 | awk 'a[$1]++{print $ ...

  2. 文件md5码怎么生成_Linux 系统文件校验方法--MD5,SHA1,PGP,SHA256,SHA512

    MD5校验 原理:对文件进行MD5 Hash,求出文件的MD5哈希值,通过下载后文件MD5哈希值和发布者提供的MD5哈希值是否一致来判断文件是否在发布者发布之后被篡改过. [root@centos-1 ...

  3. 如何用Python和hashlib实现文件MD5码的批量存储

    目录 简介: 源代码: 源代码说明: 效果如下所示: 简介: 可以考虑以下几个可能的应用: 如果你需要对文件进行校验或验证,你可以使用MD5码来检查文件是否被篡改或损坏. 如果你需要对文件进行分类或去 ...

  4. Java 获取文件md5值校验文件

    假如我们想校验两个文件网络传输中是否改变了,或者校验两个文件是否一致可以使用md5校验. 代码: import java.io.FileInputStream; import java.io.Inpu ...

  5. 【windows】查看文件md5码

    CMD certutil -hashfile [filepath] [type] filepath为文件路径 type为选择的加密算法MD2 MD4 MD5 SHA1 SHA256 SHA384 SH ...

  6. python md5解密_python 生成文件MD5码

    pymd5.py的代码如下: #-*-coding:utf-8-*- ''' Created on 2012-5-25 @author: kanpiaoxue ''' import hashlib i ...

  7. html批量转码工具,文件转码工具(文件GBK与UTF编码批量转码工具)

    这是一个将批量的txt文件转换成Unicode编码的工具,转换的速度快,使用简单. 什么是Unicod编码? Unicode(统一码.万国码.单一码)是一种在计算机上使用的字符编码.Unicode 是 ...

  8. HTML5 file api读取文件的MD5码工具

    1.工具的用途:用HTML5 file api读取文件的MD5码.MD5码在文件的唯一性识别上有很重要的应用,业内常用MD5进行文件识别.文件秒传.文件安全性检查等: 2.适用性:IE.Chrome皆 ...

  9. shell之旅--将目录下的文件重命名为md5码+后缀名

    前两天要做一个功能,由客户端上传一个zip包,服务端对这个zip包进行解压,并且对这个文件夹下的所有文件进行md5,并将文件重命名为文件md5码+文件后缀,保存原文件名与md5码之间的映射关系.想想这 ...

最新文章

  1. mysql索引排序算法_MySQL中利用索引对数据进行排序的基础教程
  2. 最新 主流笔记本cpu列表
  3. python语音分割_用7行Python代码构建自己的有声读物
  4. 对未来计算机的畅想初中英语,初中英语期中考试,作文停电一小时,在北京……在上海……在威海…….doc...
  5. CentOs6.6安装Python3
  6. java 图像渲染_对具有大量图像的视图执行本机渲染性能
  7. UNIX网络编程——常用服务器模型总结
  8. [Struts]使用tiles管理界面遇到困难
  9. 耳机插在主机后面声音很小,音频软件测试很大声音,如何解决电脑前面耳机没声音后面却正常的问题...
  10. 2021 年中国城市发展规划数据源
  11. pytorch和python的区别_Keras和PyTorch的视觉识别与迁移学习对比
  12. 数据库的基本命令 创建数据库 创建表 插入数据
  13. 巴特沃斯滤波器、切比雪夫、椭圆滤波
  14. 电脑重装系统演示,惠普电脑怎么进入bios,一看就会懂的重装方法
  15. 电脑装双系统有什么坏处?可不只是速度变慢!
  16. 创建优化的Go镜像文件以及踩过的坑
  17. 解决keras安装之后无法使用的问题
  18. 【8.23模拟赛T1.1296】城墙【贪心】
  19. PowerDesigner15.5 逆向生成mysql数据PDM文件
  20. 德国kit计算机硕士申请条件,卡尔斯鲁厄理工学院研究生申请条件是怎样的?

热门文章

  1. 国家高新技术企业,哪些情况将被取消资格?
  2. 《代码整洁之道》简单总结
  3. 关于Android开发工程师的从业预期与自我要求
  4. 好烦哦,第12次双11全球大考,又考第一了
  5. Nature:肠道微生物异常为何会导致肝病?
  6. 数字货运角逐:满帮化零为整,福佑化整为零
  7. 俞敏洪的演讲 看后很受感触
  8. shell 文件处理 并集 交集 差集
  9. 从富士康普工转行产品经理,月薪翻了3倍
  10. 致我那终将逝去的青春——二十年后再相会