当前位置:   article > 正文

java TrueLicense实现 实现License授权许可和验证_java license授权

java license授权

简述

可用于项目交付项目部署到甲方以及包括代码防止泄露,经常会出现公司内部代码被已离职人员在下家公司使用,底层代码的封装增加license部分,杜绝这块的问题。定期更换license文件可进行续期,项目中采用truelicense version 1.33实现,SpringBoot version 2.0.3.RELEASE。
代码如下:
license-server
License-client
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

私钥、公钥、私钥证书生成

私钥

keytool -genkey -alias privatekey -keystore privateKeys.store -validity 3650
  • 1

私钥证书

keytool -export -alias privatekey -file certfile.cer -keystore privateKeys.store
  • 1

公钥

keytool -import -alias publiccert -file certfile.cer -keystore publicCerts.store
  • 1

License 生成

拉去码云中的项目
访问接口生成License文件

package com.license.server.controller;

import com.license.core.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * 用于生成证书文件,不能放在给客户部署的代码里
 *
 * @author zifangsky
 * @date 2018/4/26
 * @since 1.0.0
 */
@RestController
@RequestMapping("/license")
public class LicenseCreatorController {

    /**
     * 证书生成路径
     */
    private String licensePath = "C:/Users/zifangsky/Desktop/license_demo/license.lic";

    /**
     * 获取服务器硬件信息
     *
     * @param osName 操作系统类型,如果为空则自动判断
     * @return com.ccx.models.license.LicenseCheckModel
     * @author zifangsky
     * @since 1.0.0
     */
    @RequestMapping(value = "/getServerInfos", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    public LicenseCheckModel getServerInfos(@RequestParam(value = "osName", required = false) String osName) {
        //操作系统类型
        if (StringUtils.isBlank(osName)) {
            osName = System.getProperty("os.name");
        }
        osName = osName.toLowerCase();

        AbstractServerInfos abstractServerInfos = null;

        //根据不同操作系统类型选择不同的数据获取方法
        if (osName.startsWith("windows")) {
            abstractServerInfos = new WindowsServerInfos();
        } else if (osName.startsWith("linux")) {
            abstractServerInfos = new LinuxServerInfos();
        } else {//其他服务器类型
            abstractServerInfos = new LinuxServerInfos();
        }

        return abstractServerInfos.getServerInfos();
    }

    /**
     * 生成证书
     *
     * @param param 生成证书需要的参数,如:{"subject":"ccx-models","privateAlias":"privateKey","keyPass":"5T7Zz5Y0dJFcqTxvzkH5LDGJJSGMzQ","storePass":"3538cef8e7","licensePath":"C:/Users/zifangsky/Desktop/license.lic","privateKeysStorePath":"C:/Users/zifangsky/Desktop/privateKeys.keystore","issuedTime":"2018-04-26 14:48:12","expiryTime":"2018-12-31 00:00:00","consumerType":"User","consumerAmount":1,"description":"这是证书描述信息","licenseCheckModel":{"ipAddress":["192.168.245.1","10.0.5.22"],"macAddress":["00-50-56-C0-00-01","50-7B-9D-F9-18-41"],"cpuSerial":"BFEBFBFF000406E3","mainBoardSerial":"L1HF65E00X9"}}
     * @return java.util.Map<java.lang.String                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               java.lang.Object>
     * @author zifangsky
     * @since 1.0.0
     */
    @RequestMapping(value = "/generateLicense", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    public Map<String, Object> generateLicense(@RequestBody(required = true) LicenseCreatorParam param) {
        Map<String, Object> resultMap = new HashMap<>(2);

        if (StringUtils.isBlank(param.getLicensePath())) {
            param.setLicensePath(licensePath);
        }

        LicenseCreator licenseCreator = new LicenseCreator(param);
        boolean result = licenseCreator.generateLicense();

        if (result) {
            resultMap.put("result", "ok");
            resultMap.put("msg", param);
        } else {
            resultMap.put("result", "error");
            resultMap.put("msg", "证书文件生成失败!");
        }

        return resultMap;
    }
//
//    @RequestMapping(value = "/generateLicense", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
//    public Map<String, Object> generateLicense(@RequestBody Map<String, Object> params) {
//        return licenseCreatorService.generateLicense(params);
//    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95

License 客户端部署

生成完毕后
License客户端代码拉去到本地,然后打包到本地依赖库。若install后依赖还是存在问题可以通过如下命令

mvn install:install-file -DgroupId=com.license.client   -DartifactId=license-client -Dversion=1.0.0-SNAPSHOT  -Dfile=D:\LicenseDemo\license-client\target\license-client-1.0.0-SNAPSHOT.jar   -Dpackaging=jar
  • 1

将自己的项目依赖这个license-client,添加自定义拦截器
该拦截器在license完成,只需在自己的项目中配置添加即可
在这里插入图片描述
在这里插入图片描述
上图 在 WebMvcConfigurer 中注入 拦截器 并且 添加拦截器 添加拦截地址
注:拦截地址为登录校验地址 如果 登录校验地址与 登录页跳转地址相同 请将登录验证地址更名 否则 拦截器 在没有通过认证证书的情况下 会将登陆页面拦截
配置文件

添加 license 配置 公钥路径 以及 证书路径可更改

license:
  subject: license_demo
  publicAlias: publicCert
  storePass: public_password1234
  licensePath: E:/license.lic
  • 1
  • 2
  • 3
  • 4
  • 5

配置启动类
在这里插入图片描述

启动类包扫描 默认扫描 application启动类 文件平级以及下级的文件夹与类 配置license 包扫描路径 com.licanse

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/663894
推荐阅读
相关标签
  

闽ICP备14008679号