2012-01-11 12 views
6

Estoy escribiendo una aplicación java webstart para implementar desde el sitio web para que los usuarios puedan hacer clic y ejecutar mi software. Necesito tener un tipo de identificación de máquina única para evitar abusar del acceso a los archivos. Me gustaría usar la dirección MAC del cliente como clave única para que el servidor pueda garantizar que ningún cliente descargue demasiado.Cómo la aplicación Java WebStart Obtiene la dirección MAC para acceder a mi página web

Por supuesto, un usuario puede tener varias tarjetas de red, entonces, ¿cómo puede mi aplicación Java determinar la dirección MAC de la tarjeta de red que el usuario está utilizando para acceder a mi sitio web?

+4

¿Qué pasa cuando un usuario cambia su dirección MAC con frecuencia para eludir esta restricción? –

Respuesta

6

Puede usar java.net.NetworkInterface.getNetworkInterfaces para obtener las interfaces de red y llamar a getHardwareAddress() sobre ellas para obtener la dirección MAC.

Es posible que desee filtrar loopback con if.isLoopBack() (donde "if" es el objeto de interfaz). Filtre también cualquier interfaz donde if.getHardwareAddress() devuelve null. Luego elige uno. Puede ordenarlos por nombre, if.getName() y tomar el primero. Para sus propósitos, realmente no importa si es la interfaz real utilizada para descargar sus archivos o no, solo que puede identificar la computadora de alguna manera. Finalmente if.getHardwareAddress() le proporciona una matriz de bytes con la dirección MAC. Si prefiere tener un String, formatee cada byte con "% 02x" .format (byte) y únalos con un ":" como separador.

Como se sugiere en otra respuesta, puede ser mejor utilizar PersistenceService.

El uso de la dirección MAC puede ser útil si desea conservar datos diferentes para el mismo usuario en diferentes computadoras en el caso de que el usuario tenga los mismos archivos/hogares en cada computadora. Puede usar la dirección MAC como parte de la URL que pasa a PersistenceService # create() y get(). Útil si desea datos por computadora en lugar de datos por usuario.

ejemplo corto Scala-código:

7

identificación ..machine ..

Por qué no en lugar de hacer una especie de 'identificación de sesión'? Como cada aplicación. cargas (es posible que desee implementar el SingleInstanceService para hacer cumplir una aplicación. por PC.) haga que se ponga en contacto con el servidor para establecer una sesión única. Úselo para identificarlo para cada solicitud.

Para impedir que el usuario 'use' su asignación y detener/reiniciar la aplicación. (dentro de un límite de tiempo), almacene algunos detalles usando el PersistenceService.

+0

Esta es definitivamente una de las soluciones. Si el usuario hace clic en el inicio web desde mi sitio web, entonces puedo emitir una identificación de sesión. Otro senario es que distribuyo esta aplicación a los usuarios para que puedan hacer clic en el archivo jar en el escritorio para ejecutarla o si el sitio web no tiene página de inicio de sesión. Entonces no hay una identificación de sesión (¿estoy en lo cierto?). Usar la dirección MAC es una forma en que puedo pensar para identificar a los usuarios en esta situación. Básicamente, trato de evitarle a los usuarios demasiados problemas para iniciar sesión en todo momento. Pero sí quiero averiguar si alguien está abusando del servidor web. Gracias. –

+0

Por favor [acepte la respuesta] (http://meta.stackexchange.com/a/5235/155831) si ayudó a resolver el problema. –

Cuestiones relacionadas