Java nome da máquina atual e usuário conectado?

É possível obter o nome do usuário atualmente conectado (Windows / Unix) e o nome do host da máquina?

Eu suponho que é apenas uma propriedade de alguma class de ambiente estático.

Eu encontrei isso para o nome de usuário

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

e isso para o nome da máquina:

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

O primeiro é apenas para o Windows?

E o que o segundo fará se você não tiver um nome de host?

Para obter o usuário atualmente conectado:

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

e o nome do host da máquina:

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

Para obter o usuário atualmente conectado:

 System.getProperty("user.name"); 

Para obter o nome do host da máquina:

 InetAddress.getLocalHost().getHostName(); 

Para responder a última parte da sua pergunta, a API Java diz que getHostName () retornará

o nome do host para esse endereço IP, ou se a operação não for permitida pela verificação de segurança, a representação textual do endereço IP.

O uso de user.name não é seguro, pois as variables ​​de ambiente podem ser falsificadas. O método que você estava usando é bom, existem methods similares para sistemas operacionais baseados em UNIX

Para obter o caminho do usuário conectado no momento:

 System.getProperty("user.home");