2009-01-23 9 views
122

Est-il possible d'obtenir le nom de l'utilisateur actuellement connecté (Windows/Unix) et le nom d'hôte de la machine? Je suppose que c'est juste une propriété de classe d'environnement statique.Nom de la machine Java actuelle et utilisateur connecté?

J'ai trouvé cela pour le nom d'utilisateur

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

et ce pour le nom de la machine:

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

catch(Exception ex) { 
    ... 
} 

est le premier que pour Windows?

Et que fera le second, si vous n'avez pas de nom d'hôte?

+0

La classe 'NTSystem' existe uniquement sur les distributions' Windows' – BullyWiiPlaza

Répondre

212

Pour obtenir le utilisateur actuellement connecté:

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

et le nom d'hôte de la machine:

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

JDK Does 'System.getProperty (" user.name "); 'travailler sur les deux fenêtres et Linux? – Catfish

+0

a travaillé pour moi dans Linux –

+5

Cependant, la valeur 'user.name' [peut être usurpée] (http://stackoverflow.com/a/27899761/545127), donc elle ne devrait pas être utilisée pour l'authentification. – Raedwald

77

Pour obtenir le utilisateur actuellement connecté:

System.getProperty("user.name"); 

Pour obtenir le nom d'hôte de la machine:

InetAddress.getLocalHost().getHostName(); 

Pour répondre à la dernière partie de votre question, le Java API dit que getHostName() retournera

le nom d'hôte pour cette adresse IP, ou si l'opération est interdite par le contrôle de sécurité, le texte représentation de l'adresse IP.

+0

Réagir pour répondre à toutes les questions initiales de l'OP, c'est clairement et de manière concise. Sûrement cela devrait être la réponse acceptée – Andy

+0

Monsieur, le lien de l'API Java est invalide. Veuillez mettre à jour. –

+1

Merci @Aniket. Voir ma réponse mise à jour. –

9

L'utilisation de user.name n'est pas sécurisée car les variables d'environnement peuvent être faussées. Méthode que vous utilisez est bonne, il existe des méthodes similaires pour OS unix et

+0

Donc, ce _is_ juste pour Windows? Y a-t-il une manière _plateforme indépendante de faire cela? –

+6

Les propriétés système ne sont pas des variables d'environnement. Utilisez System.getenv ("USER") pour les variables d'environnement. System.properties peut toujours être défini par l'utilisateur sur la ligne de commande java avec java -Duser.name = someoneelse donc toujours pas sécurisé –

+0

"Il existe des méthodes similaires pour un système d'exploitation basé sur Unix": Merci, ce que je cherchais. Alors, quelle est la méthode pour ces OS? mes recherches, actuellement menées moi ... ici :) en utilisant "whoami"? – pdem

0

Pour obtenir l'utilisateur actuellement connecté dans le chemin de l'utilisateur:

System.getProperty("user.home"); 
Questions connexes