2009-01-23 16 views
122

¿Es posible obtener el nombre del usuario actualmente conectado (Windows/Unix) y el nombre de host de la máquina?¿Nombre actual de la máquina Java y usuario conectado?

Supongo que es solo una propiedad de alguna clase de entorno estático.

he encontrado esto para el nombre de usuario

com.sun.security.auth.module.NTSystem NTSystem = new 
     com.sun.security.auth.module.NTSystem(); 
System.out.println(NTSystem.getName()); 

y esto por el nombre del equipo:

import java.net.InetAddress; 
... 
String computerName; 
... 
try { 
    computerName = InetAddress.getLocalHost().getHostName(); 
} 

catch(Exception ex) { 
    ... 
} 

es el primero específica para Windows?

¿Y qué hará el segundo, si no tiene un conjunto de nombres de host?

+0

La clase 'NTSystem' sólo existe en' Windows' JDK distribuciones – BullyWiiPlaza

Respuesta

212

para obtener el usuario actualmente conectado:

System.getProperty("user.name"); //platform independent 

y el nombre de host de la máquina:

java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost(); 
System.out.println("Hostname of local machine: " + localMachine.getHostName()); 
+1

Does 'System.getProperty (" user.name "); '¿funciona tanto en Windows como en Linux? – Catfish

+0

funcionó para mí en Linux –

+5

Sin embargo, el valor 'user.name' [puede ser falso] (http://stackoverflow.com/a/27899761/545127), por lo que no debe utilizarse para la autenticación. – Raedwald

77

para obtener el usuario actualmente conectado:

System.getProperty("user.name"); 

Para llegar el nombre de host de la máquina:

InetAddress.getLocalHost().getHostName(); 

Para responder a la última parte de su pregunta, la Java API dice que getHostName() devolverá

el nombre de host para esta dirección IP, o si la operación no está permitida por el control de seguridad, lo textual representación de la dirección IP.

+0

Votación a favor para responder a todas las preguntas originales de OPs, una barra clara y concisa. Seguramente esta debería ser la respuesta aceptada – Andy

+0

Sir, el enlace API de Java no es válido. Por favor actualice. –

+1

Gracias @Aniket. Ver mi respuesta actualizada. –

9

El uso de user.name no es seguro ya que las variables de entorno pueden ser falsificadas. Método que estaba usando es bueno, hay métodos similares para sistema operativo basado en UNIX, así

+0

¿Así que esto es solo para Windows? ¿Existe una forma _plataforma independiente_ de hacer esto? –

+6

Las propiedades del sistema no son variables de entorno. Use System.getenv ("USER") para variables de entorno. System.properties aún puede ser establecido por el usuario en java commandline con java -Duser.name = someoneelse, por lo que aún no es seguro –

+0

"También existen métodos similares para el sistema operativo basado en Unix": Gracias, lo que estaba buscando. Entonces, ¿cuál es el método para estos sistemas operativos? mi investigación, actualmente me condujo ... aquí :) usando "whoami"? – pdem

0

para obtener el momento ingresados ​​ruta de usuario:

System.getProperty("user.home"); 
Cuestiones relacionadas