Nazwa aktualnej maszyny Java i zalogowany użytkownik?

153

Czy można uzyskać nazwę aktualnie zalogowanego użytkownika (Windows / Unix) i nazwę hosta maszyny?

Zakładam, że to tylko właściwość jakiejś statycznej klasy środowiska.

Znalazłem to dla nazwy użytkownika

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

a to dla nazwy maszyny:

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

catch(Exception ex) {
    ...
}

Czy pierwszy jest tylko dla systemu Windows?

A co zrobi druga, jeśli nie masz ustawionej nazwy hosta?

Omar Kooheji
źródło
NTSystemKlasa istnieje tylko na Windowsdystrybucji JDK
BullyWiiPlaza

Odpowiedzi:

256

Aby uzyskać aktualnie zalogowanego użytkownika:

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

i nazwa hosta maszyny:

java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost();
System.out.println("Hostname of local machine: " + localMachine.getHostName());
cordellcp3
źródło
1
Czy System.getProperty("user.name"); działa zarówno w systemie Windows, jak i Linux?
Sum
5
Jednak user.namewartość można sfałszować , więc nie należy jej używać do uwierzytelniania.
Raedwald
14
System.getProperty ("nazwa.użytkownika") NIE jest aktualnie zalogowanym użytkownikiem, jest to użytkownik, w ramach którego działa JVM.
rkosegi
1
Jeśli chodzi o to, co OP odnosi się do „nazwy komputera” lub „nazwy komputera”, ta odpowiedź jest nieprawidłowa. Java nie ma możliwości uzyskania „nazwy komputera”, tj. Nazwy przypisanej komputerowi na początku procesu rozruchu i niezwiązanej z siecią. Wszystkie systemy operacyjne mają tę koncepcję, ale niestety ta wartość nie jest ujawniana w Javie. Jednak często - ale nie zawsze - powyższa metoda rzeczywiście zwraca nazwę komputera. Aby uzyskać wyjaśnienie, zobacz stackoverflow.com/a/40702767/1504556 .
Piotr
91

Aby uzyskać aktualnie zalogowanego użytkownika:

System.getProperty("user.name");

Aby uzyskać nazwę hosta maszyny:

InetAddress.getLocalHost().getHostName();

Aby odpowiedzieć na ostatnią część pytania, Java API mówi, że funkcja getHostName () zwróci

nazwa hosta dla tego adresu IP lub, jeśli operacja nie jest dozwolona przez kontrolę bezpieczeństwa, tekstowa reprezentacja adresu IP.

Bill the Lizard
źródło
Głosuj za udzieleniem odpowiedzi na wszystkie pierwotne pytania PO, z wyjątkiem jednego jasno i zwięźle. Z pewnością powinna to być akceptowana odpowiedź
Andy
1
Zgadzam się z @Andy - głosuj pozytywnie za jasną i zwięzłą odpowiedź na wszystkie punkty.
Paul Eden
9

Za pomocą user.name nie jest bezpieczne, ponieważ zmienne środowiskowe można sfałszować. Metoda, z której korzystałeś, jest dobra, istnieją również podobne metody dla systemu operacyjnego opartego na Uniksie

feniks
źródło
Więc to jest tylko dla okien? Czy jest na to sposób niezależny od platformy ?
Stuart R. Jefferys
7
Właściwości systemu nie są zmiennymi środowiskowymi. Użyj System.getenv („USER”) dla zmiennych środowiskowych. System.properties nadal może być ustawiany przez użytkownika w wierszu poleceń java z java -Duser.name = someelse, więc nadal nie jest bezpieczny
dan carter
„Istnieją również podobne metody dla systemu operacyjnego opartego na unixie”: Dzięki, czego szukałem. Więc jaka jest metoda dla tych systemów operacyjnych? moje badania, aktualnie prowadzę mnie ... tutaj :) używając "whoami"?
pdem
Przepraszam za spam, przyszedłem tutaj, aby podać coś w rodzaju rozwiązania w C:: stackoverflow.com/questions/1451825/… Więc w zasadzie musimy użyć whoami lub JNI z kodem C „getpwuid (getuid ())” . Nie ma już klasy UnixSystem.
pdem
0

Aby uzyskać ścieżkę aktualnie zalogowanego użytkownika:

System.getProperty("user.home");
Swapnil1156035
źródło