最近頂了幾天前端,記錄下知識點,
開發工具是hbuilderX,業務是根據app運行的設備信息來判斷這個設備是否是已知設備庫的設備,既此設備運行這個項目是否合法
思路就是項目啟動時獲取設備mac地址,IP地址,去設備庫查詢,如果沒有就退出app,
第一步,uniapp獲取設備mac地址
//獲取mac地址 var net = plus.android.importClass("java.net.NetworkInterface") var wl0 = net.getByName('wlan0') var macByte = wl0.getHardwareAddress() var str = '' //下面這段代碼來自網絡 for (var i = 0; i < macByte.length; i++) { var tmp = ""; var num = macByte[i]; if (num < 0) { tmp =(255+num+1).toString(16); } else { tmp = num.toString(16); } if (tmp.length == 1) { tmp = "0" + tmp; } str += tmp; } console.log(str)
str既是我們的設備mac地址,需要注意的plus對象是在app啟動的時候才監聽,所以h5運行時是拿不到pius對象的,需要運行在手機上才可以,
第二步,拿到設備ip,
做這一步的時候我煩的要命,因為uniapp拿ip是真的難,最后忽然意識到我好像是個后端來着,請求的東西不都在request里面嗎!
所以,前端傳個mac地址完事,在接口里用request拿ip就簡單多了,
import javax.servlet.http.HttpServletRequest;
public String validaSbip(String macdz,HttpServletRequest request){ //從請求中拿到客戶端的IP地址 String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } System.out.println("IP地址:"+ip);//打印ip地址
然后就回到了我們前端的請求回調里寫我們的驗證就完事了
最后附上驗證不通過時強制關閉APP
let p = result.data; if(p=="0"){//設備不存在 plus.runtime.quit(); //直接關閉項目 }else if(p=="-1"){//地址對,mac地址錯誤,關閉項目 plus.runtime.quit(); //直接關閉項目 }