174 votes

Nom de la machine Java actuelle et utilisateur connecté ?

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é d'une classe d'environnement statique.

J'ai trouvé ceci 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 ceci pour le nom de la machine :

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

catch(Exception ex) {
    ...
}

Le premier est-il uniquement destiné à Windows ?

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

0 votes

El NTSystem n'existe que sur Windows Distributions de JDK

284voto

cordellcp3 Points 1713

Pour obtenir l'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());

3 votes

Fait System.getProperty("user.name"); fonctionne à la fois sur Windows et sur Linux ?

7 votes

Cependant, le user.name valeur peut être usurpée Il ne doit donc pas être utilisé pour l'authentification.

17 votes

System.getProperty("user.name") n'est PAS l'utilisateur actuellement connecté, c'est l'utilisateur sous le contexte de sécurité duquel s'exécute la JVM.

102voto

Bill the Lizard Points 147311

Pour obtenir l'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, les API Java dit que getHostName() retournera

le nom d'hôte de cette adresse IP, ou si l'opération n'est pas autorisée par le contrôle de sécurité, la représentation textuelle de l'adresse IP.

1 votes

Je vous félicite d'avoir répondu à toutes les questions du PO, sauf une, de manière claire et concise. Cela devrait être la réponse acceptée

1 votes

D'accord avec @Andy - vote en hausse pour la réponse claire et concise à tous les points.

11voto

phoenix Points 81

Utilisation de user.name n'est pas sûr car les variables d'environnement peuvent être falsifiées. La méthode que vous utilisiez est bonne, il existe des méthodes similaires pour les systèmes d'exploitation basés sur Unix.

0 votes

Donc, ceci es seulement pour Windows ? Existe-t-il un indépendant de la plate-forme manière de le faire ?

7 votes

Les propriétés du système ne sont pas des variables d'environnement. Utilisez System.getenv("USER") pour les variables d'environnement. Les propriétés système peuvent toujours être définies par l'utilisateur sur la ligne de commande java avec java -Duser.name=someoneelse, ce qui n'est toujours pas sûr.

0 votes

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

2voto

Swapnil1156035 Points 343

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

System.getProperty("user.home");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X