2012-01-11 23 views
6

我正在編寫一個java webstart應用程序以便從網站進行部署,以便用戶可以單擊並運行我的軟件。我需要有一種獨特的機器識別,以避免濫用文件的訪問。我想使用客戶端的MAC地址作爲唯一的密鑰,以便服務器可以確保沒有客戶端下載太多。Java WebStart應用程序如何獲取用於訪問我的網頁的MAC地址

當然,用戶可以有多個網卡,所以我的Java應用程序如何確定網卡用戶使用來訪問我的網站的MAC地址?

+4

當用戶更改其MAC地址經常繞過這個限制,會發生什麼? – 2012-01-11 20:57:10

回答

6

您可以使用java.net.NetworkInterface.getNetworkInterfaces獲得網絡接口,並調用getHardwareAddress()上他們獲得的MAC地址。

您可能想篩選出環回if.isLoopBack()(其中,「如果」是接口對象)。同時過濾掉if.getHardwareAddress()返回null的任何接口。然後挑出一個。你可以通過名稱if.getName()對它們進行排序,然後取第一個。出於您的目的,它是否是用於下載文件的實際界面並不重要,只是您可以以某種方式識別計算機。最後,if.getHardwareAddress()爲您提供一個包含MAC地址的字節數組。如果您希望有一個字符串,請使用「%02x」.format(byte)格式化每個字節,並用「:」作爲分隔符將它們連接起來。

正如另一個答案建議可以更好地使用PersistenceService。

使用MAC地址但可能是有用的,如果你想對在用戶具有相同的文件/每臺計算機上宿主目錄的情況下,不同的計算機相同的用戶仍然存在不同的數據。您可以使用MAC地址作爲您傳遞給PersistenceService#create()和get()的URL的一部分。如果您想要每臺計算機的數據而不是每個用戶的數據,這很有用。

短例如斯卡拉代碼:

7

..machine識別..

爲什麼不這樣做,而不是一種 '會話標識'?作爲每個應用。加載(您可能想要實施SingleInstanceService以對每臺PC強制執行一個應用程序),請聯繫服務器以建立唯一的會話。用它來爲每個請求識別它。

要阻止從「使用了」他們的津貼和停止/重新啓動應用程序的用戶。 (在時限內),使用PersistenceService存儲一些詳細信息。

+0

這絕對是解決方案之一。如果用戶從我的網站點擊網頁開始,那麼我可以發出會話ID。另一個senario是我將這個應用程序分發給用戶,以便他們可以單擊桌面上的jar文件運行它,或者如果該網站沒有登錄頁面。然後沒有會話ID(對嗎?)。在這種情況下,使用MAC地址是我可以考慮識別用戶的一種方式。基本上我試圖避免給用戶每次登錄太麻煩。但我確實想知道是否有人濫用網絡服務器。謝謝。 – 2012-02-27 05:22:23

+0

如果幫助解決問題,請[接受答案](http://meta.stackexchange.com/a/5235/155831)。 – 2017-03-07 23:06:58

相關問題