¿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?

Omar Kooheji
fuente
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());
cordellcp3
fuente
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.

Bill el lagarto
fuente
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

fénix
fuente
¿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");
Swapnil1156035
fuente