¿Nombre de máquina actual de Java y usuario registrado?


153

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

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 para el nombre de la máquina:

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

catch(Exception ex) {
    ...
}

¿Es el primero solo para Windows?

¿Y qué hará el segundo si no tiene un nombre de host establecido?


La NTSystemclase solo existe en Windowsdistribuciones JDK
BullyWiiPlaza

Respuestas:


256

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
¿ System.getProperty("user.name"); Funciona tanto en Windows como en Linux?
Bagre

55
Sin embargo, el user.namevalor puede ser falsificado , por lo que no debe utilizarse para la autenticación.
Raedwald

14
System.getProperty ("user.name") NO está actualmente conectado como usuario, es usuario bajo el contexto de seguridad de quién se está ejecutando JVM.
rkosegi

1
En cuanto a lo que OP llama "nombre de máquina" o "nombre de computadora", esta respuesta es incorrecta. Java no tiene forma de obtener el "nombre de la computadora", es decir, el nombre asignado a la computadora al principio del proceso de arranque y sin relación con la red. Todos los sistemas operativos tienen este concepto, pero desafortunadamente este valor no está expuesto en Java. Sin embargo, a menudo, pero no siempre, el método anterior devolverá el nombre de la computadora. Consulte stackoverflow.com/a/40702767/1504556 para obtener una explicación.
Peter

91

Para obtener el usuario actualmente conectado:

System.getProperty("user.name");

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

InetAddress.getLocalHost().getHostName();

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

el nombre de host para esta dirección IP, o si la verificación de seguridad no permite la operación, la representación textual de la dirección IP.


Voto a favor para responder a todas las preguntas originales de los OPs, excepto una clara y concisa. Seguramente esta debería ser la respuesta aceptada
Andy

1
De acuerdo con @Andy: vota a favor de una respuesta clara y concisa a todos los puntos.
Paul Eden

9

El uso user.nameno es seguro ya que las variables de entorno pueden ser falsificadas. El método que estaba utilizando es bueno, también hay métodos similares para sistemas operativos basados ​​en Unix


¿Entonces esto es solo para Windows? ¿Existe una forma independiente de la plataforma para hacer esto?
Stuart R. Jefferys

77
Las propiedades del sistema no son variables de entorno. Utilice System.getenv ("USUARIO") para las variables de entorno. System.properties aún puede ser configurado por el usuario en la línea de comandos de java con java -Duser.name = someoneelse, así que aún no es seguro
dan carter

"También existen métodos similares para sistemas operativos basados ​​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

Perdón por el spam, vengo aquí para dar una especie de solución en C: stackoverflow.com/questions/1451825/… Así que, básicamente, tenemos que usar whoami o JNI con el código C "getpwuid (getuid ())" . Ya no hay clase UnixSystem.
pdem

0

Para obtener la ruta de usuario actualmente conectada:

System.getProperty("user.home");
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.