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

153

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

Presumo que seja apenas uma propriedade de alguma classe de ambiente estático.

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

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

Omar Kooheji
fonte
A NTSystemclasse existe apenas em Windowsdistribuições JDK
BullyWiiPlaza 31/03

Respostas:

256

Para obter o usuário conectado no momento:

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());
cordellcp3
fonte
1
Funciona System.getProperty("user.name"); em janelas e linux?
Catfish
5
No entanto, o user.namevalor pode ser falsificado , portanto, não deve ser usado para autenticação.
Raedwald
14
System.getProperty ("user.name") NÃO está conectado no momento, é usuário no contexto de segurança de quem a JVM está em execução.
Rkosegi
1
Quanto ao que OP se refere como "nome da máquina" ou "nome do computador", esta resposta está incorreta. Java não tem como obter o "nome do computador", ou seja, o nome atribuído ao computador no início do processo de inicialização e não relacionado à rede. Todos os SOs têm esse conceito, mas infelizmente esse valor não é exposto em Java. No entanto, com freqüência - mas nem sempre - o método acima realmente retornará o nome do computador. Consulte stackoverflow.com/a/40702767/1504556 para obter explicação.
Peterh
91

Para obter o usuário conectado no momento:

System.getProperty("user.name");

Para obter o nome do host da máquina:

InetAddress.getLocalHost().getHostName();

Para responder à ú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.

Bill the Lizard
fonte
O voto positivo por responder a todas as perguntas originais dos OP exclui uma clara e concisa. Certamente esta deve ser a resposta aceita
Andy
1
Concorde com @Andy - vote com sucesso para obter respostas claras e concisas a todos os pontos.
Paul Eden
9

O uso user.namenão é seguro, pois as variáveis ​​de ambiente podem ser falsificadas. O método que você estava usando é bom, existem métodos semelhantes para sistemas operacionais baseados em unix também

Fénix
fonte
Então, isso é apenas para janelas? Existe uma maneira independente de plataforma para fazer isso?
Stuart R. Jefferys
7
As propriedades do sistema não são variáveis ​​de ambiente. Use System.getenv ("USER") para variáveis ​​de ambiente. System.properties ainda pode ser definido pelo usuário na linha de comando java com java -Duser.name = someoneelse por isso ainda não é segura
dan carter
"Existem métodos semelhantes para sistemas operacionais baseados em unix também": Obrigado, o que eu estava procurando. Então, qual é o método para esse sistema operacional? minha pesquisa, atualmente me conduziu ... aqui :) usando "whoami"?
Pdem 26/08/16
Desculpe pelo spam, eu venho aqui para fornecer uma espécie de solução em C:: stackoverflow.com/questions/1451825/… Então, basicamente, temos que usar whoami ou JNI com o código C "getpwuid (getuid ())" . Não há mais classe UnixSystem.
Pdem 26/08/16
0

Para obter o caminho do usuário atualmente conectado:

System.getProperty("user.home");
Swapnil1156035
fonte