2012-01-11 9 views
6

Piszę aplikację webstart Java do wdrożenia ze strony internetowej, aby użytkownicy mogli klikać i uruchamiać moje oprogramowanie. Muszę mieć unikalną identyfikację urządzenia, aby uniknąć nadużywania dostępu do plików. Chciałbym użyć adresu MAC klienta jako klucza unikatowego, aby serwer mógł zagwarantować, że żaden klient nie pobierze za dużo.Jak aplikacja Java WebStart Uzyskiwanie adresu MAC w celu uzyskania dostępu do mojej strony internetowej

Oczywiście użytkownik może mieć wiele kart sieciowych, więc w jaki sposób moja aplikacja Java może określić adres MAC karty sieciowej, z której użytkownik korzysta, aby uzyskać dostęp do mojej witryny internetowej?

+4

Co się dzieje, gdy użytkownik zmieni swój adres MAC często obejście tego ograniczenia? –

Odpowiedz

6

Można użyć interfejsu java.net.NetworkInterface.getNetworkInterfaces w celu uzyskania interfejsów sieciowych i wywołania funkcji getHardwareAddress() w celu uzyskania adresu MAC.

Możesz odfiltrować sprzężenie zwrotne za pomocą if.isLoopBack() (gdzie "jeśli" jest obiektem interfejsu). Odfiltruj także dowolny interfejs, w którym if.getHardwareAddress() zwróci wartość null. Następnie wybierz jedną. Możesz sortować je według nazwy, if.getName(), i zrobić pierwsze. Dla twoich potrzeb nie ma znaczenia, czy jest to rzeczywisty interfejs używany do pobierania twoich plików, czy też nie, tylko że możesz jakoś zidentyfikować komputer. Wreszcie if.getHardwareAddress() daje tablicę bajtów z adresem MAC. Jeśli wolisz mieć ciąg, sformatuj każdy bajt z "% 02x" .format (byte) i połącz je z ":" jako separatorem.

Jak zasugerowano w innej odpowiedzi, lepiej użyć usługi PersistenceService.

Korzystanie z adresu MAC może być jednak przydatne, jeśli chcesz zachować różne dane dla tego samego użytkownika na różnych komputerach, w przypadku gdy użytkownik ma te same pliki/katalogi domowe na każdym komputerze. Możesz użyć adresu MAC jako części adresu URL przekazywanego do PersistenceService # create() i get(). Przydatne, jeśli chcesz danych dla komputera, a nie danych dla poszczególnych użytkowników.

Krótki przykład Scala-code:

7

identyfikacja ..machine ..

Może zamiast zrobić coś w rodzaju 'identyfikacji sesji'? Jak każda aplikacja. ładuje (możesz zaimplementować SingleInstanceService, aby wymusić jedną aplikację na komputer), niech skontaktuje się z serwerem, aby ustanowić unikalną sesję. Użyj go, aby zidentyfikować go dla każdego żądania.

Aby uniemożliwić użytkownikowi "wykorzystanie" ich przydziału i zatrzymanie/ponowne uruchomienie aplikacji. (w określonym czasie), zapisz niektóre szczegóły za pomocą PersistenceService.

+0

Jest to zdecydowanie jedno z rozwiązań. Jeśli użytkownik kliknie początek strony z mojej strony internetowej, mogę wydać identyfikator sesji. Innym senario jest to, że rozpowszechniam tę aplikację dla użytkowników, aby mogli kliknąć plik jar na pulpicie, aby go uruchomić lub jeśli strona internetowa nie ma strony logowania. Wtedy nie ma identyfikatora sesji (mam rację?). Używanie adresu MAC jest jednym ze sposobów, w jaki mogę zidentyfikować użytkowników w tej sytuacji. Zasadniczo staram się nie dawać użytkownikom zbyt wielu kłopotów z logowaniem się za każdym razem. Ale chcę się dowiedzieć, czy ktoś nadużywa serwera. Dzięki. –

+0

Proszę [zaakceptuj odpowiedź] (http://meta.stackexchange.com/a/5235/155831), jeśli to pomogło rozwiązać problem. –

Powiązane problemy