hehanjm 发表于 2019-7-17 14:40

hazelcast Management Center 源码分析

本帖最后由 hehanjm 于 2019-7-17 14:45 编辑

事情背景
最近在使用 Vert.x 工具集的全家桶做微服务的相关开发,Vert.x默认使用集群管理器是 hazelcast 。在经过相关使用后,惊喜的发现hazelcast提供了可视化的集群管理工具 Management Center可以进行可视化管理。
喔, so cool. 功能详情https://hedy.xyz/assets/img/20181018-hazelcastLicense/1.png撸起袖子开始干,跟着官方文档把可视化管理工具搭建起来了,突然发现处于开发模式(仅限2个节点)。噗。。。吐血。https://hedy.xyz/assets/img/20181018-hazelcastLicense/2.png跟着引导来到 30-Day License Key 页面,跟着提示一步一步填写了信息,然后就是等。
三天后~
咦~ 为啥我还没有收到申请的试用license呢?翻遍了邮箱的各个角落,最后确认确实是没有收到。额~ 这TM就尴尬了。顿时不爽的感觉就上来了,这他妈让我白等了三天啊。
今天这事就是**,也TM要把它给办咯。
去同性交友网(Github)瞅瞅看有没有大神破解过,吃个现成的。然而可能经过2个小时的搜索,发现大神们都很尊重知识付费( 或者是hazelcast不热门,不屑于去破解吧。哈哈哈,我就当是大神们尊重知识付费吧 )。那没办法咯,自己琢磨琢磨吧。https://hedy.xyz/assets/img/20181018-hazelcastLicense/3.png先搂一眼这个可视化管理工具包的内容。哎哟哟~ war包啊。那要祭出神器啊 JD-GUI https://hedy.xyz/assets/img/20181018-hazelcastLicense/4.pnghttps://hedy.xyz/assets/img/20181018-hazelcastLicense/5.png第一眼就看到了 com.hazelcast.license 包,先记着。再瞅瞅看还有没有通过类名就能找到的重点。 com.hazelcast.webmonitor.service.LicenseManager 嗯哼,这个类貌似就是重点了。com.hazelcast.license.util.LicenseHelper.java 代码节选
public static License checkLicenseKeyPerFeature(String licenseKey, String versionString, Feature feature) {
    License license = getLicense(licenseKey, versionString);
    if (!license.getFeatures().contains(feature)) {
      throw new InvalidLicenseException("The Feature " + feature.getText() + " is not enabled for your license key." + "Please contact sales@hazelcast.com");
    }
    return license;
}

public static License getLicense(String licenseKey, String versionString) {
    if (licenseKey == null) {
      throw new InvalidLicenseException("License Key not configured!");
    }
    License license = null;
    try {
      license = LicenseExtractorV2.extractLicense(licenseKey);
    } catch (InvalidLicenseException e1) {
      try {
            license = LicenseExtractorV3.extractLicense(licenseKey);
      } catch (InvalidLicenseException e2) {
            license = LicenseExtractorV4.extractLicense(licenseKey);
      }
    }
    int version = extractHazelcastMajorMinorVersionAsInt(versionString);
    if ((license.getHazelcastVersion() != 99) && (license.getHazelcastVersion() != version)) {
      throw new InvalidLicenseException("This license cannot work with your hazelcast version!");
    }
    if ((license.isTrial()) && (isExpired(license))) {
      throw new InvalidLicenseException("Trial license has expired! Please contact sales@hazelcast.com");
    }
    if (isExpired(license)) {
      throw new InvalidLicenseException("Enterprise License has expired! Please contact sales@hazelcast.com");
    }
    return license;
}
最后跟着代码一步一步找到了 com.hazelcast.license.extractor.LicenseExtractorV4.extractLicense() 方法,代码就不贴了,就是提取license的算法。那这不是来活儿吗?
分析算法规则https://hedy.xyz/assets/img/20181018-hazelcastLicense/6.png最后发现个问题,那就是 Expired 的日期最大就到2099年。不过想想2099年啊,那时候还需要人写代码么?哈哈哈~
测试验证https://hedy.xyz/assets/img/20181018-hazelcastLicense/7.pnghttps://hedy.xyz/assets/img/20181018-hazelcastLicense/8.png哈哈哈,妥儿了~

练练手(好久没写Swing了。)https://hedy.xyz/assets/img/20181018-hazelcastLicense/9.png
声明:
[*]如需生产环境应用,请购买正版
[*]相关代码纯属研究与爱好,请在学习使用后删除

海盗小K 发表于 2019-7-17 19:33

hazelcast暂时没怎么用。。。缓存主要还是用的redis,嘿嘿

hehanjm 发表于 2019-7-18 10:35

海盗小K 发表于 2019-7-17 19:33
hazelcast暂时没怎么用。。。缓存主要还是用的redis,嘿嘿

hazelcast其实不是用来做缓存的:lol

RL_LEE 发表于 2020-1-17 11:21

你好,能分享一下hazelcast的management-center的license生成工具或代码吗?
页: [1]
查看完整版本: hazelcast Management Center 源码分析