2009-01-23 13 views
122

Ist es möglich, den Namen des aktuell angemeldeten Benutzers (Windows/Unix) und den Hostnamen des Rechners zu erhalten?Java aktueller Computername und angemeldeter Benutzer?

Ich nehme an, es ist nur eine Eigenschaft einiger statischer Umweltklasse. für Windows

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

catch(Exception ex) { 
    ... 
} 

sind der erste gerade:

Ich habe dies für die Benutzername

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

und dies für die Computernamen gefunden?

Und was wird der zweite tun, wenn Sie keinen Hostnamen gesetzt haben?

+0

Die 'NTSystem' Klasse existiert nur auf' Windows' JDK-Distributionen – BullyWiiPlaza

Antwort

212

die aktuell angemeldeten Benutzers zu erhalten:

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

und der Host-Name der Maschine:

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

Ist 'System.getProperty (" user.name "); 'Arbeit an Windows und Linux? – Catfish

+0

arbeitete für mich in Linux –

+5

Allerdings kann der 'user.name' Wert [gefälscht werden] (http://stackoverflow.com/a/27899761/545127), so sollte es nicht für die Authentifizierung verwendet werden. – Raedwald

77

die aktuell angemeldeten Benutzers zu erhalten:

System.getProperty("user.name"); 

Um der Hostname der Maschine:

InetAddress.getLocalHost().getHostName(); 

den letzten Teil Ihrer Frage zu beantworten, sagt die Java API dass getHostName()

der Hostname für diese IP-Adresse zurück, oder wenn der Betrieb nicht durch die Sicherheitskontrolle, den Text erlaubt ist Darstellung der IP-Adresse.

+0

Upvote für die Beantwortung aller ursprünglichen OP Fragen offen und übersichtlich. Sicher sollte dies die akzeptierte Antwort sein – Andy

+0

Sir, Java-API-Link ist ungültig. Bitte aktualisieren. –

+1

Danke @Aniket. Siehe meine aktualisierte Antwort. –

9

Die Verwendung von user.name ist nicht sicher, da Umgebungsvariablen gefälscht werden können. Verfahren Sie wurden unter Verwendung von gut ist, gibt es ähnliche Methoden für Unix-basiertes Betriebssystem als auch

+0

Das ist also nur für Windows? Gibt es einen _platform unabhängigen_ Weg? –

+6

Systemeigenschaften sind keine Umgebungsvariablen. Verwenden Sie System.getenv ("USER") für Umgebungsvariablen. System.properties können weiterhin vom Benutzer auf Java-Kommandozeile gesetzt werden mit java -Duser.name = jemandeselse also immer noch nicht sicher –

+0

"Es gibt ähnliche Methoden auch für Unix-basierte OS": Danke, wonach ich gesucht habe. Also, was ist die Methode für dieses Betriebssystem? meine Forschung, führte mich derzeit ... hier :) mit "whoami"? – pdem

0

der zur Zeit in Benutzerpfad angemeldet zu erhalten:

System.getProperty("user.home"); 
Verwandte Themen