使用truelicense进行Java程序license控制 经过扩张可以验证license 开始结束日期,验证绑定给定mac地址
来源:互联网 发布:mac 启动 文件夹 问号 编辑:程序博客网 时间:2024/05/22 14:47
转自:http://blog.csdn.net/jingshuaizh/article/details/44461289
使用truelicense进行Java程序license控制
经过扩张可以验证license 开始结束日期,验证绑定给定mac地址。
Truelicense 是一个开源的java license 验证项目。
使用truelicense实现用于JAVA工程license机制(包括license生成和验证)请参考http://www.it165.net/pro/html/201404/11540.html
其中包括license授权机制的原理和制作license的具体步骤
本文主要是在此文基础上增加了mac 地址验证:
在createparam.properties
中增加 ip地址和 mac 地址的配置
##########common parameters########### #alias PRIVATEALIAS=privateKeys #key(important!) KEYPWD=iptv1234 #STOREPWD STOREPWD=iptv1234 #SUBJECT SUBJECT=bigdata #licPath licPath=C:/9exce/license/license.lic #priPath priPath=C:/9exce/license/PrivateKeys.keystore ##########license content########### #issuedTime issuedTime=2015-03-09 #notBeforeTime notBefore=2015-03-09 #notAfterTime notAfter=2016-03-20 #ip address ipAddress=150.236.220.200 #mac address macAddress=80-00-0B-56-3B-32 #consumerType consumerType=user #ConsumerAmount consumerAmount=1 #info info=this is a license
因为增加了mac地址,需要改变LicenseManager中的validate函数增加create_validate 用于create时的verify, 因为创建证书的时候 不能验证mac地址。
protected synchronized void create_validate(LicenseContent paramLicenseContent) throws LicenseContentException { LicenseParam localLicenseParam = getLicenseParam(); if (!localLicenseParam.getSubject().equals( paramLicenseContent.getSubject())) { throw new LicenseContentException(EXC_INVALID_SUBJECT); } if (paramLicenseContent.getHolder() == null) { throw new LicenseContentException(EXC_HOLDER_IS_NULL); } if (paramLicenseContent.getIssuer() == null) { throw new LicenseContentException(EXC_ISSUER_IS_NULL); } if (paramLicenseContent.getIssued() == null) { throw new LicenseContentException(EXC_ISSUED_IS_NULL); } Date localDate1 = new Date(); Date localDate2 = paramLicenseContent.getNotBefore(); if ((localDate2 != null) && (localDate1.before(localDate2))) { throw new LicenseContentException(EXC_LICENSE_IS_NOT_YET_VALID); } Date localDate3 = paramLicenseContent.getNotAfter(); if ((localDate3 != null) && (localDate1.after(localDate3))) { throw new LicenseContentException(EXC_LICENSE_HAS_EXPIRED); } String str = paramLicenseContent.getConsumerType(); if (str == null) { throw new LicenseContentException(EXC_CONSUMER_TYPE_IS_NULL); } Preferences localPreferences = localLicenseParam.getPreferences(); if ((localPreferences != null) && (localPreferences.isUserNode())) { if (!USER.equalsIgnoreCase(str)) { throw new LicenseContentException(EXC_CONSUMER_TYPE_IS_NOT_USER); } if (paramLicenseContent.getConsumerAmount() != 1) { throw new LicenseContentException( EXC_CONSUMER_AMOUNT_IS_NOT_ONE); } } else if (paramLicenseContent.getConsumerAmount() <= 0) { throw new LicenseContentException( EXC_CONSUMER_AMOUNT_IS_NOT_POSITIVE); } }
更新validate增加验证客户server的mac地址。
protected synchronized void validate(LicenseContent paramLicenseContent) throws LicenseContentException { LicenseParam localLicenseParam = getLicenseParam(); if (!localLicenseParam.getSubject().equals( paramLicenseContent.getSubject())) { throw new LicenseContentException(EXC_INVALID_SUBJECT); } if (paramLicenseContent.getHolder() == null) { throw new LicenseContentException(EXC_HOLDER_IS_NULL); } if (paramLicenseContent.getIssuer() == null) { throw new LicenseContentException(EXC_ISSUER_IS_NULL); } if (paramLicenseContent.getIssued() == null) { throw new LicenseContentException(EXC_ISSUED_IS_NULL); } Date localDate1 = new Date(); Date localDate2 = paramLicenseContent.getNotBefore(); if ((localDate2 != null) && (localDate1.before(localDate2))) { throw new LicenseContentException(EXC_LICENSE_IS_NOT_YET_VALID); } Date localDate3 = paramLicenseContent.getNotAfter(); if ((localDate3 != null) && (localDate1.after(localDate3))) { throw new LicenseContentException(EXC_LICENSE_HAS_EXPIRED); } LicenseCheckModel licenseCheckModel = (LicenseCheckModel)paramLicenseContent.getExtra(); String macAddress = licenseCheckModel.getIpMacAddress(); try { if (!ListNets.validateMacAddress(macAddress)) { throw new LicenseContentException(EXC_LICENSE_HAS_EXPIRED); } } catch (SocketException e) { // TODO Auto-generated catch block throw new LicenseContentException(EXC_LICENSE_HAS_EXPIRED); } String str = paramLicenseContent.getConsumerType(); if (str == null) { throw new LicenseContentException(EXC_CONSUMER_TYPE_IS_NULL); } Preferences localPreferences = localLicenseParam.getPreferences(); if ((localPreferences != null) && (localPreferences.isUserNode())) { if (!USER.equalsIgnoreCase(str)) { throw new LicenseContentException(EXC_CONSUMER_TYPE_IS_NOT_USER); } if (paramLicenseContent.getConsumerAmount() != 1) { throw new LicenseContentException( EXC_CONSUMER_AMOUNT_IS_NOT_ONE); } } else if (paramLicenseContent.getConsumerAmount() <= 0) { throw new LicenseContentException( EXC_CONSUMER_AMOUNT_IS_NOT_POSITIVE); } }
package zlicense.util; import java.net.*; import java.util.*; import static java.lang.System.out; public class ListNets { public static void main(String args[]) throws SocketException { String ip = "150.236.220.200"; String mac = "80-00-0B-56-3B-32"; boolean flag = validatoIpAndMacAddress(ip, mac); boolean macflag = validateMacAddress( mac); out.printf("validatoMacAddress flag=%s\n", macflag); out.printf("validatoIpAndMacAddress flag=%s\n", flag); } static void displayInterfaceInformation(NetworkInterface netint) throws SocketException { out.printf("Display name: %s\n", netint.getDisplayName()); out.printf("Name: %s\n", netint.getName()); byte[] mac = netint.getHardwareAddress(); if (mac != null) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < mac.length; i++) { sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); } System.out.println("mac=" + sb.toString()); } Enumeration<InetAddress> inetAddresses = netint.getInetAddresses(); for (InetAddress inetAddress : Collections.list(inetAddresses)) { out.printf("InetAddress: %s\n", inetAddress); System.out .println("InetAddress ip=" + inetAddress.getHostAddress()); } out.printf("\n"); } public static boolean validateMacAddress(String macAddress) throws SocketException { boolean returnFlag = false; Enumeration<NetworkInterface> nets = NetworkInterface .getNetworkInterfaces(); for (NetworkInterface netint : Collections.list(nets)) { byte[] mac = netint.getHardwareAddress(); StringBuilder sb = new StringBuilder(); if (mac != null) { for (int i = 0; i < mac.length; i++) { sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); } System.out.println("mac=" + sb.toString()); } if (sb.toString().equals(macAddress)) { returnFlag = true; } } return returnFlag; } public static boolean validatoIpAndMacAddress(String ipAddress, String macAddress) throws SocketException { boolean returnFlag = false; Enumeration<NetworkInterface> nets = NetworkInterface .getNetworkInterfaces(); for (NetworkInterface netint : Collections.list(nets)) { byte[] mac = netint.getHardwareAddress(); StringBuilder sb = new StringBuilder(); if (mac != null) { for (int i = 0; i < mac.length; i++) { sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); } System.out.println("mac=" + sb.toString()); } if (sb.toString().equals(macAddress)) { Enumeration<InetAddress> inetAddresses = netint .getInetAddresses(); String ip = ""; for (InetAddress inetAddress : Collections.list(inetAddresses)) { ip = inetAddress.getHostAddress(); System.out.println("InetAddress ip=" + inetAddress.getHostAddress()); if (ipAddress.toString().equals(ip)) { returnFlag = true; } } } } return returnFlag; } }
package zlicense.util; public class LicenseCheckModel { private String ipAddress; private String ipMacAddress; private String CPUSerial; private String motherboardSN; private String hardDiskSN; public String getIpAddress() { return ipAddress; } public void setIpAddress(String ipAddress) { this.ipAddress = ipAddress; } public String getIpMacAddress() { return ipMacAddress; } public void setIpMacAddress(String ipMacAddress) { this.ipMacAddress = ipMacAddress; } public String getCPUSerial() { return CPUSerial; } public void setCPUSerial(String cPUSerial) { CPUSerial = cPUSerial; } public String getMotherboardSN() { return motherboardSN; } public void setMotherboardSN(String motherboardSN) { this.motherboardSN = motherboardSN; } public String getHardDiskSN() { return hardDiskSN; } public void setHardDiskSN(String hardDiskSN) { this.hardDiskSN = hardDiskSN; } }
更新CreateLicense 增加mac和ip 的配置读取并写入license证书,采用了content.setExtra(licenseCheckModel);
将需要验证的信息 写入licenseCheckModel 然后set到content中。
改变了 truelicense 中所有的文件读取方式,采用绝对路径读取。
Properties prop= new Properties(); //InputStream in= getClass().getResourceAsStream(propertiesPath); try { InputStreamin = new FileInputStream(propertiesPath); prop.load(in); } catch(IOException e) { // TODOAuto-generated catch block e.printStackTrace(); }
所有的配置文件和我生成的 key stroe 在java-license-jar/src/main/resources文件夹下
项目code地址:
https://github.com/jingshauizh/JavaSpringSurmmary/tree/master/java-license-jar
0 0
- 使用truelicense进行Java程序license控制 经过扩张可以验证license 开始结束日期,验证绑定给定mac地址
- 使用truelicense进行Java程序license控制 经过扩张可以验证license 开始结束日期,验证绑定给定mac地址
- 使用truelicense实现用于JAVA工程license机制(包括license生成和验证)
- 使用truelicense实现用于JAVA工程license机制(包括license生成和验证)
- 使用truelicense实现用于JAVA工程license机制(包括license生成和验证)
- 使用truelicense实现用于JAVA工程license机制(包括license生成和验证)
- 使用truelicense实现用于JAVA工程license机制
- 使用truelicense实现用于JAVA工程license机制
- Easyui_datebox验证-开始日期小于结束日期
- 生成license用于验证证书
- 搭建IDEA 服务器 验证license
- NetAdvantage asp.net ——使用WebDateChooser在客户端验证开始日期与结束日期
- NetAdvantage asp.net ——使用WebDateChooser在客户端验证开始日期与结束日期
- NetAdvantage asp.net ——使用WebDateChooser在客户端验证开始日期与结束日期
- My97DatePicker日历实现开始日期小于结束日期验证
- ArcObjects二次开发的license验证问题
- truelicense 添加mac验证说明及demo下载
- ClearCase等Rational试用软件下载地址,是否有临时License还有待验证
- ICS malloc lab总结
- C++ List的用法(整理)
- nginx 读写限流
- php flock 使用实例
- js 替换所有
- 使用truelicense进行Java程序license控制 经过扩张可以验证license 开始结束日期,验证绑定给定mac地址
- KafKa(0.10)安装部署和测试
- IO复用select模型
- 2017 年热门编程语言排行榜,你的语言上榜没?
- MQTT介绍
- Android - 自定义View不显示
- 十四周OJ4求3×3矩阵对角线元素之和
- java产生随机数
- Scala 开启Scala编程语言之旅