Ім'я поточної машини Java та ввійшов у систему користувач?


153

Чи можливо отримати ім’я користувача, який зараз увійшов (Windows / Unix) та ім'я хоста машини?

Я припускаю, що це лише властивість класу статичного середовища.

Я знайшов це для імені користувача

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

і це для назви машини:

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

catch(Exception ex) {
    ...
}

Перший лише для Windows?

А що буде робити другий, якщо у вас немає імені хоста?


NTSystemКлас існує тільки на Windowsрозподілах JDK
BullyWiiPlaza

Відповіді:


256

Щоб отримати користувача, який зараз увійшов у систему:

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

і ім'я хоста машини:

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

1
Працює System.getProperty("user.name"); як Windows, так і Linux?
Сом

5
Однак user.nameзначення може бути підробленим , тому його не слід використовувати для аутентифікації.
Raedwald

14
System.getProperty ("ім'я користувача") наразі НЕ входить у систему, це користувач, у якому контекст безпеки працює JVM.
rkosegi

1
Що стосується того, що ОП посилається на "ім'я машини" чи "ім'я комп'ютера", ця відповідь є невірною. Java не має можливості отримати "ім'я комп'ютера", тобто ім'я, присвоєне комп'ютеру на початку процесу завантаження і не пов'язане з мережею. Усі ОС мають цю концепцію, але, на жаль, це значення не виявляється в Java. Однак часто - але не завжди - вищевказаний метод справді поверне ім'я комп’ютера. Пояснення див. У розділі stackoverflow.com/a/40702767/1504556 .
peterh

91

Щоб отримати користувача, який зараз увійшов у систему:

System.getProperty("user.name");

Щоб отримати ім'я хоста машини:

InetAddress.getLocalHost().getHostName();

Щоб відповісти на останню частину вашого запитання, Java API каже, що getHostName () повернеться

ім'я хоста для цієї IP-адреси, або якщо операція не дозволена перевіркою безпеки, текстове подання IP-адреси.


Оновлення для відповіді на всі оригінальні запитання ОП в одному чітко та стисло. Безумовно, це має бути прийнята відповідь
Енді

1
Погодьтеся з @Andy - голосуй за чітку і стисну відповідь на всі питання.
Пол Едем

9

Використання user.nameне є безпечним, оскільки можна змінити змінні середовища. Метод, який ви використовували, хороший, є аналогічні методи і для ОС на базі Unix


Так що це просто для вікон? Чи існує платформний незалежний спосіб це зробити?
Стюарт Р. Джеффіріс

7
Властивості системи - це не змінні середовища. Використовуйте System.getenv ("USER") для змінних середовища. System.properties все ще може бути встановлений користувачем у командному рядку java з java -Duser.name = Someelse, тому все ще не захищено
дан carter

"Існують подібні методи для ОС на базі unix": Спасибі, на що я шукав. То який метод для цих ОС? моє дослідження, в даний час мене проводили ... тут :), використовуючи "whoami"?
pdem

Вибачте за спам, я прийшов сюди, щоб дати якесь рішення в C:: stackoverflow.com/questions/1451825/… Отже, в основному, ми повинні використовувати або whoami, або JNI з кодом C "getpwuid (getuid ())" . Класу UnixSystem вже немає.
pdem

0

Щоб отримати поточно зареєстрований шлях користувача:

System.getProperty("user.home");
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.