Nome attuale della macchina Java e accesso dell'utente?


153

È possibile ottenere il nome dell'utente attualmente connesso (Windows / Unix) e il nome host della macchina?

Presumo sia solo una proprietà di una classe di ambiente statico.

Ho trovato questo per il nome utente

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

e questo per il nome della macchina:

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

catch(Exception ex) {
    ...
}

Il primo è solo per Windows?

E cosa farà il secondo se non hai impostato un nome host?


La NTSystemclasse esiste solo sulle Windowsdistribuzioni JDK
BullyWiiPlaza

Risposte:


256

Per ottenere l'utente attualmente connesso:

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

e il nome host della macchina:

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

1
Funziona System.getProperty("user.name"); su Windows e Linux?
Pesce gatto

5
Tuttavia, il user.namevalore può essere falsificato , quindi non deve essere utilizzato per l'autenticazione.
Raedwald,

14
System.getProperty ("user.name") NON è attualmente l'utente connesso, è l'utente nel contesto di sicurezza di cui è in esecuzione JVM.
rkosegi,

1
Per quanto riguarda ciò che OP chiama "nome macchina" o "nome computer" questa risposta non è corretta. Java non ha modo di ottenere il "nome computer", ovvero il nome assegnato al computer all'inizio del processo di avvio e non correlato alla rete. Tutti i sistemi operativi hanno questo concetto, ma sfortunatamente questo valore non è esposto in Java. Tuttavia spesso - ma non sempre - il metodo sopra restituirà effettivamente il nome del computer. Consultare stackoverflow.com/a/40702767/1504556 per una spiegazione.
Pietro,

91

Per ottenere l'utente attualmente connesso:

System.getProperty("user.name");

Per ottenere il nome host della macchina:

InetAddress.getLocalHost().getHostName();

Per rispondere all'ultima parte della domanda, l' API Java afferma che getHostName () verrà restituito

il nome host per questo indirizzo IP, o se l'operazione non è consentita dal controllo di sicurezza, la rappresentazione testuale dell'indirizzo IP.


Valorizza la risposta a tutte le domande originali dei PO, escludendone una chiara e concisa. Sicuramente questa dovrebbe essere la risposta accettata
Andy,

1
Concordo con @Andy - voto positivo per una risposta chiara e concisa a tutti i punti.
Paul Eden,

9

L'uso user.namenon è sicuro poiché le variabili di ambiente possono essere simulate. Il metodo che stavi usando è buono, ci sono metodi simili anche per sistemi operativi basati su unix


Quindi questo è solo per Windows? Esiste un modo indipendente dalla piattaforma per farlo?
Stuart R. Jefferys,

7
Le proprietà di sistema non sono variabili di ambiente. Utilizzare System.getenv ("USER") per le variabili di ambiente. System.properties può ancora essere impostato dall'utente sulla riga di comando java con java -Duser.name = qualcun altro quindi ancora non sicuro
dan carter

"Esistono metodi simili anche per sistemi operativi basati su unix": Grazie, quello che stavo cercando. Allora, qual è il metodo per questi sistemi operativi? la mia ricerca, attualmente mi ha condotto ... qui :) usando "whoami"?
pdem,

Ci scusiamo per lo spam, vengo qui per fornire una sorta di soluzione in C:: stackoverflow.com/questions/1451825/… Quindi, in sostanza, dobbiamo usare whoami o JNI con il codice C "getpwuid (getuid ())" . Non esiste più una classe UnixSystem.
pdem,

0

Per ottenere il percorso utente attualmente connesso:

System.getProperty("user.home");
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.