首页 > 解决方案 > 如何使 java jar 在特定日期/时间过期

问题描述

我正在通过 Maven 构建一些 java jar 构建,但我需要放置某些时间戳,以使 JAR 在 JAR 中固定/提供的某个日期过期。

谢谢库马尔·肖拉夫

标签: javamavenjarmaven-3

解决方案


有几种方法:

  • 最简单的方法:硬编码。
  • 特性
  • 分布式方式
  • 买个工具
  • 搜索免费工具
  • 构建工具

硬编码

在您的代码中的某处,您将拥有

if (currentDate > hardcodedDate) System.exit(0);
runYourCode();

这是没有意义的。对于了解反编译的每个人来说,将其更改为:

// if (currentDate > hardcodedDate) System.exit(0);
runYourCode();

特性

在属性文件中,您保留它应该工作的天数。在您的应用程序启动时,您检查某个文件是否存在。如果它没有 -> 创建它,除了你当前的系统日期之外什么都没有。在每次下一次启动时:

Date check = readDateFromFile();
if ( currentDate > check + numberOfDays ) System.exit(0);

再次,很容易伪造。您需要做的就是删除创建的文件,调回系统日期,...

分散式

这是我至少会考虑的。分发所有代码意味着可以根据用户的需要复制它。棘手的业务,因为如果他们知道您的代码,他们可以更改它。

创建一个与处理您的业务逻辑的服务联系的客户端。确保每个客户端都有一个“密钥”,无论它是硬编码的还是在属性文件中,这是无关紧要的。在您的数据库中,保留所有密钥的列表,包括试用密钥和真实密钥。对于试用密钥,在第一次使用时,您在 DB -> 当前系统日期 + numberOfDaysAllowed 中添加一个值。在其他所有用途中,根据系统日期检查该值(不是客户端的系统日期,而是您的服务器的系统日期)。日期到了吗?从数据库中删除试用密钥,或将标志“过期”设置为真。然后,检查串口是否在数据库中,如果是,标志是否过期。如果串行不在数据库中,或者标志已过期,则终止程序。客户端可能会尝试篡改密钥,但如果他这样做了,密钥将不会

买个工具

让我们面对现实吧,为此创建软件的人也需要赚取收入

搜索免费工具

在我链接到的线程中,有一个指向此页面的链接:trial maker,这似乎是免费的。

构建工具

如果您不想购买工具,并且对任何现有的免费工具不满意,请随意构建自己的工具。


推荐阅读