2012-01-11 12 views
6

Sto scrivendo un'applicazione webstart java da distribuire dal sito Web in modo che gli utenti possano fare clic ed eseguire il mio software. Ho bisogno di avere una sorta di identificazione della macchina unica per evitare di abusare dell'accesso ai file. Vorrei utilizzare l'indirizzo MAC del client come chiave univoca in modo che il server possa garantire che nessun client scarichi troppo.Come applicazione Java WebStart Ottenere l'indirizzo MAC per accedere alla mia pagina web

Ovviamente, un utente può disporre di più schede di rete, quindi come può la mia applicazione Java determinare l'indirizzo MAC della scheda di rete che l'utente sta utilizzando per accedere al mio sito web?

+4

Cosa succede quando un utente cambia il loro indirizzo MAC spesso per aggirare questa limitazione? –

risposta

6

È possibile utilizzare java.net.NetworkInterface.getNetworkInterfaces per ottenere le interfacce di rete e richiamare getHardwareAddress() su di esse per ottenere l'indirizzo MAC.

Si consiglia di filtrare il loopback con if.isLoopBack() (dove "if" è l'oggetto di interfaccia). Filtra anche qualsiasi interfaccia in cui if.getHardwareAddress() restituisce null. Quindi scegli uno. Puoi ordinarli per nome, if.getName(), e prendere il primo. Per i tuoi scopi non importa se è l'interfaccia reale utilizzata per scaricare i tuoi file o meno, solo che puoi identificare il computer in qualche modo. Infine if.getHardwareAddress() fornisce una matrice di byte con l'indirizzo MAC. Se preferisci avere una stringa, formatta ogni byte con "% 02x" .format (byte) e uniscili con ":" come separatore.

Come suggerito in un'altra risposta, potrebbe essere meglio utilizzare PersistenceService.

L'utilizzo dell'indirizzo MAC può tuttavia essere utile se si desidera mantenere dati diversi per lo stesso utente su computer diversi nel caso in cui l'utente abbia gli stessi file/homedir su ciascun computer. Puoi usare l'indirizzo MAC come parte dell'URL che passi a PersistenceService # create() e get(). Utile se vuoi dati per computer piuttosto che dati per utente.

esempio Breve Scala-code:

7

identificazione ..machine ..

Perché non invece fare una sorta di 'identificativi di sessione'? Come ogni app. carichi (potrebbe essere necessario implementare lo SingleInstanceService per applicare un'applicazione per PC.) contattare il server per stabilire una sessione univoca. Usalo per identificarlo per ogni richiesta.

Per impedire all'utente di "consumare" la propria tolleranza e arrestare/riavviare l'app. (entro un limite di tempo), memorizzare alcuni dettagli usando PersistenceService.

+0

Questa è sicuramente una delle soluzioni. Se l'utente fa clic sul Web, inizia dal mio sito Web, quindi posso rilasciare un ID di sessione. Un altro senario è che distribuisco questa applicazione agli utenti in modo che possano fare clic sul file jar sul desktop per eseguirlo o se il sito web non ha una pagina di accesso. Quindi non esiste un id di sessione (ho ragione?). L'utilizzo dell'indirizzo MAC è un modo in cui posso pensare di identificare gli utenti in questa situazione. Fondamentalmente sto cercando di evitare di dare agli utenti troppi problemi per accedere ogni volta. Ma voglio scoprire se qualcuno sta abusando del server web. Grazie. –

+0

Si prega di [accettare la risposta] (http://meta.stackexchange.com/a/5235/155831) se ha aiutato a risolvere il problema. –

Problemi correlati