Java aktueller Computername und angemeldeter Benutzer?

153

Ist es möglich, den Namen des aktuell angemeldeten Benutzers (Windows / Unix) und den Hostnamen des Computers abzurufen?

Ich nehme an, es ist nur eine Eigenschaft einer statischen Umgebungsklasse.

Ich habe dies für den Benutzernamen gefunden

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

und dies für den Maschinennamen:

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

catch(Exception ex) {
    ...
}

Ist der erste nur für Windows?

Und was macht der zweite, wenn Sie keinen Hostnamen festgelegt haben?

Omar Kooheji
quelle
Die NTSystemKlasse existiert nur auf WindowsJDK-Distributionen
BullyWiiPlaza

Antworten:

256

So erhalten Sie den aktuell angemeldeten Benutzer:

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

und der Hostname des Computers:

java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost();
System.out.println("Hostname of local machine: " + localMachine.getHostName());
cordellcp3
quelle
1
Funktioniert es System.getProperty("user.name"); sowohl unter Windows als auch unter Linux?
Wels
5
Der user.nameWert kann jedoch gefälscht werden , sodass er nicht zur Authentifizierung verwendet werden sollte.
Raedwald
14
System.getProperty ("user.name") ist derzeit NICHT als Benutzer angemeldet, sondern als Benutzer, unter dessen Sicherheitskontext JVM ausgeführt wird.
Rkosegi
1
Was OP als "Maschinenname" oder "Computername" bezeichnet, ist diese Antwort falsch. Java hat keine Möglichkeit, den "Computernamen" zu erhalten, dh den Namen, der dem Computer zu Beginn des Startvorgangs zugewiesen wurde und nicht mit dem Netzwerk zusammenhängt. Alle Betriebssysteme haben dieses Konzept, aber leider wird dieser Wert in Java nicht verfügbar gemacht. Jedoch oft - aber nicht immer - gibt die obige Methode tatsächlich den Computernamen zurück. Weitere Informationen finden Sie unter stackoverflow.com/a/40702767/1504556 .
Peterh
91

So erhalten Sie den aktuell angemeldeten Benutzer:

System.getProperty("user.name");

So erhalten Sie den Hostnamen des Computers:

InetAddress.getLocalHost().getHostName();

Um den letzten Teil Ihrer Frage zu beantworten, gibt die Java-API an , dass getHostName () zurückgegeben wird

den Hostnamen für diese IP-Adresse oder, wenn der Vorgang durch die Sicherheitsüberprüfung nicht zulässig ist, die Textdarstellung der IP-Adresse.

Bill die Eidechse
quelle
Upvote für die Beantwortung aller ursprünglichen Fragen des OP ist klar und präzise. Sicherlich sollte dies die akzeptierte Antwort sein
Andy
1
Stimmen Sie mit @Andy überein - stimmen Sie für eine klare und präzise Antwort auf alle Punkte ab.
Paul Eden
9

Die Verwendung user.nameist nicht sicher, da Umgebungsvariablen gefälscht werden können. Die von Ihnen verwendete Methode ist gut. Es gibt ähnliche Methoden auch für Unix-basierte Betriebssysteme

Phönix
quelle
Das ist also nur für Windows? Gibt es eine plattformunabhängige Möglichkeit, dies zu tun?
Stuart R. Jefferys
7
Systemeigenschaften sind keine Umgebungsvariablen. Verwenden Sie System.getenv ("USER") für Umgebungsvariablen. System.properties kann immer noch vom Benutzer in der Java-Befehlszeile mit Java -Duser.name = jemand anderem festgelegt werden, also immer noch nicht sicher
Dan Carter
"Es gibt ähnliche Methoden auch für Unix-basierte Betriebssysteme": Danke, wonach ich gesucht habe. Was ist die Methode für diese Betriebssysteme? meine Forschung, führte mich derzeit ... hier :) mit "whoami"?
pdem
Entschuldigung für den Spam, ich komme hierher, um eine Art Lösung in C zu geben :: stackoverflow.com/questions/1451825/… Im Grunde müssen wir entweder whoami oder JNI mit dem C-Code "getpwuid (getuid ())" verwenden. . Es gibt keine Klasse UnixSystem mehr.
pdem
0

So rufen Sie den aktuell angemeldeten Benutzerpfad ab:

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