日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Springboot如何實現Web系統License授權認證

瀏覽:26日期:2023-05-15 13:30:42

在我們做系統級框架的時候,我們要一定程度上考慮系統的使用版權,不能隨便一個人拿去在任何環境都能用,所以我們需要給我們系統做一個授權認證機制,只有上傳了我們下發的lic文件并驗證通過,才能正常使用,下面就開始一步一步實現這個功能

1.生成機器碼

我們首先要做的就是對軟件部署的環境的唯一性進行限制,這里使用的是macadderss,當然你也可以換成cpu序列編號,并無太大影響,先上代碼

private static String getMac() { try { Enumeration<NetworkInterface> el = NetworkInterface .getNetworkInterfaces(); while (el.hasMoreElements()) {byte[] mac = el.nextElement().getHardwareAddress();if (mac == null) continue;String hexstr = bytesToHexString(mac);return getSplitString(hexstr, '-', 2).toUpperCase(); } } catch (Exception exception) { exception.printStackTrace(); } return null; } public static String getMachineCode() throws Exception{ Set<String> result = new HashSet<>(); String mac = getMac(); result.add(mac); Properties props = System.getProperties(); String javaVersion = props.getProperty('java.version'); result.add(javaVersion); String javaVMVersion = props.getProperty('java.vm.version'); result.add(javaVMVersion); String osVersion = props.getProperty('os.version'); result.add(osVersion); String code = Encrpt.GetMD5Code(result.toString()); return getSplitString(code, '-', 4); }

這里進行的操作是取出機器碼,與java版本,jvm,操作系統參數進行混合,并進行MD5操作

2.進行lic文件的生成

Springboot如何實現Web系統License授權認證

Springboot如何實現Web系統License授權認證

這是我生成證書與進行授權證書的界面,可以看到授權證書主要包含三個要素,機器碼,是否永久有效標識,證書時效,我們會將這些數據寫入文本中并進行加密處理,看下生成證書的代碼

public static void getLicense(String isNoTimeLimit, String licenseLimit, String machineCode, String licensePath, String priavateKeyPath) throws Exception{ String[] liccontent = {'LICENSEID=yanpeng19940119@gmail.com','LICENSENAME=YBLOG使用證書',MessageFormat.format('LICENSETYPE={0}',isNoTimeLimit),MessageFormat.format('EXPIREDAY={0}',licenseLimit), //日期采用yyyy-MM-dd日期格式MessageFormat.format('MACHINECODE={0}',machineCode),'' }; //將lic內容進行混合簽名并寫入內容 StringBuilder sign = new StringBuilder(); for(String item:liccontent){ sign.append(item+'yblog'); } liccontent[5] = MessageFormat.format('LICENSESIGN={0}',Encrpt.GetMD5Code(sign.toString())); FileUtil.createFileAndWriteLines(licensePath,liccontent); //將寫入的內容整體加密替換 String filecontent =FileUtil.readFileToString(licensePath); String encrptfilecontent = Encrpt.EncriptWRSA_Pri(filecontent,priavateKeyPath); File file = new File(licensePath); file.delete(); FileUtil.createFile(licensePath,encrptfilecontent); }

這里我們是將一些信息與特定標識進行拼接然后加密,使用的是RSA加密,我們使用私鑰加密公鑰解密,保證驗證的開放性與生成證書的私密性,密鑰可以使用java自帶的keytool工具進行生成,

教程地址:http://note.youdao.com/noteshare?id=09e2bfc902b21a335a4505f7946a45c9

在lic文件最后我們加上一個LICENSESIGN參數,對其他信息進行一次加密,防止信息被篡改,生成文件后再對文本進行整體加密

這里生成密鑰的長度為2048而非1024,所以解密塊長度為256,這里需要注意下,公鑰加密方法為,為了方便大家,這里提供下具體加密代碼

private static final int MAX_ENCRYPT_BLOCK = 117;private static final int MAX_DECRYPT_BLOCK=256; public static String EncriptWRSA_Pri(String data,String path) throws Exception{ String encryptData =''; FileInputStream in = new FileInputStream(path); KeyStore ks = KeyStore.getInstance('JKS');// JKS: Java KeyStoreJKS,可以有多種類型 ks.load(in, '123'.toCharArray()); in.close(); String alias = 'yblogkey'; // 記錄的別名 String pswd = '123'; // 記錄的訪問密碼 java.security.cert.Certificate cert = ks.getCertificate(alias); //獲取私鑰 PrivateKey privateKey = (PrivateKey) ks.getKey(alias, pswd.toCharArray()); //私鑰加密 Cipher cipher = Cipher.getInstance('rsa'); SecureRandom random = new SecureRandom(); cipher.init(Cipher.ENCRYPT_MODE, privateKey, random); try { // Cipher cipher = Cipher.getInstance('RSA'); // cipher.init(Cipher.ENCRYPT_MODE, publicKey); int length = data.getBytes().length; int offset = 0; byte[] cache; ByteArrayOutputStream outStream = new ByteArrayOutputStream(); int i = 0; while(length - offset > 0){if(length - offset > MAX_ENCRYPT_BLOCK){ cache = cipher.doFinal(data.getBytes(), offset, MAX_ENCRYPT_BLOCK);}else{ cache = cipher.doFinal(data.getBytes(), offset, length - offset);}outStream.write(cache, 0, cache.length);i++;offset = i * MAX_ENCRYPT_BLOCK; } return encode.encode(outStream.toByteArray()); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return encryptData; } public static String DecriptWithRSA_Pub(String data,String path) throws Exception{ X509Certificate x509Certificate = (X509Certificate) getCertificate(path); // 獲得公鑰 PublicKey publicKey = x509Certificate.getPublicKey(); Cipher cipher = Cipher.getInstance('rsa'); SecureRandom random = new SecureRandom(); byte[] bEncrypt = decoder.decodeBuffer(data); //公鑰解密 cipher.init(Cipher.DECRYPT_MODE, publicKey, random); String decryptData = ''; // byte[] plainData = cipher.doFinal(bEncrypt); // System.out.println('11111:'+new String(plainData)); int inputLen = bEncrypt.length; ByteArrayOutputStream out = new ByteArrayOutputStream(); int offSet = 0; byte[] cache; int i = 0; // 對數據分段解密 while (inputLen - offSet > 0) { if (inputLen - offSet > MAX_DECRYPT_BLOCK) {cache = cipher.doFinal(bEncrypt, offSet, MAX_DECRYPT_BLOCK); } else {cache = cipher.doFinal(bEncrypt, offSet, inputLen - offSet); } out.write(cache, 0, cache.length); i++; offSet = i * MAX_DECRYPT_BLOCK; } byte[] decryptedData = out.toByteArray(); out.close(); return new String(decryptedData); }

3.驗證lic

我們會在系統中注冊一個攔截器,未通過系統授權認證會自動跳轉到lic文件上傳界面,springboot接收文件與常規java有一些不同,使用的MultipartFile對象,會獲取到上傳文件的數組,進行操作,看下保存上傳lic文件代碼

@RequestMapping(value='/login/licenseauth',method= RequestMethod.POST) @ResponseBody public Map<Object,Object> licenseauth(MultipartHttpServletRequest multiReq){ Map<Object,Object> map = new HashMap<Object,Object>(); try { String savePath = ResourceUtils.getURL('src/main/resources/static/lic').getPath(); MultipartFile file = multiReq.getFile('file'); String filename = file.getOriginalFilename(); File uploadfile = new File(savePath + '' + filename); if (!uploadfile.exists()){//獲取item中的上傳文件的輸入流InputStream in = file.getInputStream();//創建一個文件輸出流FileOutputStream out = new FileOutputStream(savePath + '' + filename);//創建一個緩沖區byte buffer[] = new byte[1024];//判斷輸入流中的數據是否已經讀完的標識int len = 0;//循環將輸入流讀入到緩沖區當中,(len=in.read(buffer))>0就表示in里面還有數據while((len=in.read(buffer))>0){ //使用FileOutputStream輸出流將緩沖區的數據寫入到指定的目錄(savePath + '' + filename)當中 out.write(buffer, 0, len);}//關閉輸入流in.close();//關閉輸出流out.close(); } map.put('executestatus','1'); }catch (Exception e){ e.printStackTrace(); map.put('executestatus','0'); } return map; }

有了上傳文件,我們就可以通過系統內置的公鑰對lic文件的機器碼,授權時間進行驗證,確定是否能正常訪問系統

public static boolean authLicense() throws Exception{ boolean isauth = false; String pubkpath = ResourceUtils.getURL('src/main/resources/static/lic/').getPath()+'yblog.crt'; String licpath = ResourceUtils.getURL('src/main/resources/static/lic/').getPath(); File lic = new File(licpath); String[] filelist = lic.list(); if (filelist.length>0){ for (int i = 0; i < filelist.length; i++) {if (filelist[i].contains('.lic')){ File readfile = new File(licpath + filelist[i]); if (readfile.isFile()) { String liccontent = FileUtil.readFileToString(readfile); String decriptliccontent = Encrpt.DecriptWithRSA_Pub(liccontent,pubkpath); HashMap<String, String> props = genDataFromArrayByte(decriptliccontent.getBytes()); String licenseid = props.get('LICENSEID'); String licensename= props.get('LICENSENAME'); String licensetype = props.get('LICENSETYPE'); String liclimit = props.get('EXPIREDAY'); String machinecode = props.get('MACHINECODE'); String lincensesign = props.get('LICENSESIGN'); //驗證簽名 String allinfogroup = 'LICENSEID='+licenseid+'yblog'+'LICENSENAME='+licensename+'yblog'+'LICENSETYPE='+licensetype+'yblog'+'EXPIREDAY='+liclimit+'yblog'+'MACHINECODE='+machinecode+'yblogyblog'; if (lincensesign.equals(Encrpt.GetMD5Code(allinfogroup))){ //驗證機器碼 if (getMachineCode().equals(machinecode)){SimpleDateFormat sdf=new SimpleDateFormat('yyyy-MM-dd');Date bt=new Date();Date et=sdf.parse(liclimit);//驗證時間if(bt.compareTo(et)<=0){ isauth = true; System.out.println('注冊文件:'+filelist[i]+',已通過驗證'); break;}else{ System.out.println('證書過期');} }else{System.out.println('機器碼不一致'); } }else{ System.out.println('簽名不一致'); } }} } }else{ System.out.println('未上傳證書'); } return isauth; }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
re久久精品视频| 国产一级久久| 国产日韩欧美高清免费| 日本不卡在线视频| 日韩精选在线| 国产精品日本一区二区不卡视频| 另类欧美日韩国产在线| 激情不卡一区二区三区视频在线| 日韩伦理福利| 免费中文字幕日韩欧美| 欧美亚洲三级| 久久av免费看| 99国产精品一区二区| 午夜宅男久久久| 国产精品白丝一区二区三区| 精品欧美日韩精品| 欧美69视频| 青草av.久久免费一区| 四虎成人av| 免费精品视频| 精品一区二区三区在线观看视频 | 国产精品综合| 国内自拍视频一区二区三区| 欧美午夜精品一区二区三区电影| 亚洲精品无吗| 高清av不卡| 综合欧美精品| 在线看片福利| 日本不卡视频在线| 91日韩在线| 日本久久一区| 99视频精品全国免费| 日本午夜精品久久久久| 国产成人精品亚洲日本在线观看| 亚洲一区av| www.九色在线| 91嫩草精品| 精品在线91| 欧美啪啪一区| 中文亚洲免费| 久久男人天堂| 国产精品视频首页| 亚洲激情另类| 欧美丰满日韩| 国产精品一区二区99| 欧美福利一区| 国产99精品一区| 久久精品国产99国产| 狠狠色狠狠色综合日日tαg| 精品一区二区三区免费看 | sm久久捆绑调教精品一区| 久热综合在线亚洲精品| 在线看片国产福利你懂的| 欧美日韩调教| 美女精品在线观看| 久久一级电影| 国产成人免费| 国产精品theporn| 一区二区三区四区精品视频| 久久精品播放| 国产一区二区亚洲| 国产精品资源| 日本精品国产| 热久久久久久久| 四虎影视精品| 国产精品久久久久蜜臀| 国产精品亲子伦av一区二区三区| 亚洲欧美日韩在线观看a三区| 激情黄产视频在线免费观看| 国产图片一区| 日韩福利在线观看| 亚洲理论在线| 国产手机视频一区二区| 国产在线不卡| 91精品综合| 天堂日韩电影| 久久天堂av| 成人av三级| 麻豆成全视频免费观看在线看| 国产麻豆一区二区三区| 日韩成人av影视| 日韩精品成人在线观看| 一区二区国产在线| 亚洲欧洲免费| 日韩在线观看中文字幕| 亚洲精品护士| 亚洲精品少妇| 日韩精品一区二区三区中文| 亚洲精品韩国| 日本色综合中文字幕| 日韩精品亚洲专区| 日韩1区2区日韩1区2区| 欧美综合精品| 国产精品大片| 麻豆久久久久久| 精品国产亚洲日本| 国产成人精品免费视| 国产不卡精品在线| 四虎成人av| 日本精品在线中文字幕| 亚洲高清av| 免费久久精品视频| 日韩国产在线一| 麻豆极品一区二区三区| 亚洲精品**中文毛片| 免费精品国产| 亚洲欧洲美洲国产香蕉| 国产美女久久| 亚洲综合电影| 91精品国产乱码久久久久久久| 亲子伦视频一区二区三区| 婷婷激情久久| 中文不卡在线| 国产精品对白| 久久精品亚洲人成影院| 欧美综合二区| 国产精品任我爽爆在线播放| 久久电影tv| 亚洲欧洲一区| 国产欧美一区二区三区精品观看| 欧美好骚综合网| 日韩午夜精品| 久久精品99国产国产精| 电影91久久久| 婷婷成人在线| 日韩成人精品一区二区三区 | 国产精品99久久久久久董美香| 岛国av免费在线观看| av亚洲免费| 国产日韩欧美一区在线| 色在线视频观看| 天堂成人国产精品一区| 欧美国产中文高清| 99精品视频在线| 午夜精品福利影院| 日韩成人精品一区二区| 91久久黄色| 麻豆一区二区三区| 99免费精品| 日韩国产一二三区| 日韩欧美精品一区| 亚洲久久视频| 波多视频一区| 亚洲精品看片| 久久久一二三| 日本视频一区二区| 欧美亚洲在线日韩| 国产精品欧美在线观看| japanese国产精品| 久久xxx视频| 蜜臀久久99精品久久久久久9| 欧美丰满日韩| 日韩高清在线不卡| 日韩精品午夜| 国产精品黄色| 日韩精品一区第一页| 国产suv精品一区二区四区视频 | 亚洲欧美日本国产| 波多野结衣久久精品| 日韩精品亚洲aⅴ在线影院| 成人羞羞视频播放网站| 国产精品对白久久久久粗| 美女日韩在线中文字幕| 国产在线不卡一区二区三区| 日韩国产在线观看| 国产精品免费看| 人人香蕉久久| 国产一区不卡| 久久wwww| 欧美一区=区三区| 亚洲在线观看| 91精品国产成人观看| 精品国产亚洲一区二区三区在线 | 福利一区二区免费视频| 日韩精品一级| 蜜芽一区二区三区| 国产综合欧美| 蜜桃av.网站在线观看| 国产伦精品一区二区三区视频| 免费在线欧美视频| 国产国产精品| 999视频精品| 色一区二区三区| 久久只有精品| 欧美国产另类| 国产高清日韩| 欧美日韩亚洲一区二区三区在线| 免费看日韩精品| 日韩视频在线一区二区三区| 日韩毛片在线| 日韩欧美一区二区三区在线视频 | 99视频精品| 日韩亚洲在线| 亚洲作爱视频| 制服诱惑一区二区| 国产精品美女久久久| 夜久久久久久| 美女网站久久| 亚洲精品一级| 婷婷精品在线|