今天在專案中遇到乙個前端唯一標示的問題,特此記錄一下。
專案的系統架構如下:
整個網路環境分為內網環境和外網環境兩個部分,內網的使用者客戶端1和客戶端2通過雙網絡卡前置機的**訪問外部公網環境的**,外網環境的客戶端3和客戶端4直接訪問外網的**。
**中有個介面只允許內網使用者訪問,如何解決?(訪問該頁面時,web會進行乙個自動登入操作,如果登入成功了則正常獲取頁面資料進行顯示)
由於內網使用者發起的網路請求通過nginx**最後都是以相同的ip請求伺服器,所以後台可以增加ip位址白名單,如果請求ip是前置機的公網ip,則返回登入成功,允許訪問該頁面,如果不是白名單中的ip,則返回登入失敗,不允許訪問該頁面。
方法二:前端發起網路請求時增加唯一標識問題就是js如何獲取本地客戶端的唯一標識,或者說如何獲取本地客戶端的ip或者mac位址?
答案可能令人比較失望,就是前端js沒有辦法獲取到本地客戶端ip或者mac位址。
當然有一些迂迴的方法可以一定程度上實現,特此記錄下:
(1)ie瀏覽器下通過activex的方法
該方法的侷限性不言而喻,就是必須限定瀏覽器為ie,而且需要手動啟動activex。
(2)通過第三方api獲取公網ip
可以通過第三方的ip位址查詢介面獲取到客戶端的公網ip,該方法的侷限性在於僅僅只能獲取到公網ip。
(3)通過webrtc獲取本地ip
該方法的原理是通過建立webrtc (網頁即時通訊,web real-time communication)連線,在連線中獲取客戶端本地ip,侷限性在於相對麻煩。
備忘:
1、如何檢視pc的本地ip和公網ip?
本地ip通過ipconfig檢視即可,其中的ipv4位址即為本地ip,如下圖:
什麼是公網ip?
Android唯一標識
github位址 android中能作為唯一標識有四個,但付出一定的代價還是還是能改變,所以目前android中沒有絕對的唯一標識。1 裝置id imei 需要授予許可權 telephonymanager telephonymanager telephonymanager getsystemserv...
全球唯一標識GUID
guid global unique identifier 全域性唯一識別符號,它是由網絡卡上的標識數字 每個網絡卡都有唯一的標識號 以及 cpu 時鐘的唯一數字生成的的乙個 16 位元組的二進位制值。guid 的格式為 xx x x x 其中每個 x 是 0 9 或 a f 範圍內的乙個十六進製制...
Identifier GUID (全域性唯一識別符號)
ylbtech miscellaneos identifier guid 全域性唯一識別符號 a,返回頂部1,全域性唯一識別符號 guid,globally unique identifier 是一種由演算法生成的二進位制長度為128位的數字識別符號。guid主要用於在擁有多個節點 多台計算機的網路...