Имя текущего компьютера Java и зарегистрированный пользователь?

Можно ли получить имя текущего пользователя (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?

И что будет делать второй, если у вас нет набора имен хостов?

Ответ 1

Чтобы получить зарегистрированного пользователя:

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

и имя хоста машины:

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

Ответ 2

Чтобы получить зарегистрированного пользователя:

System.getProperty("user.name");

Чтобы получить имя хоста машины:

InetAddress.getLocalHost().getHostName();

Чтобы ответить на последнюю часть вашего вопроса, Java API говорит, что getHostName() вернет

имя хоста для этого IP-адреса или если операция не разрешена проверкой безопасности, текстовое представление IP-адреса.

Ответ 3

Использование user.name небезопасно, поскольку переменные среды могут быть подделаны. Метод, который вы использовали, хорош, существуют аналогичные методы для ОС на базе unix.

Ответ 4

Чтобы получить текущий входной путь пользователя:

System.getProperty("user.home");

Ответ 5

Ниже приведено решение ТОЛЬКО для WINDOWS

В случаях, когда приложение (например, Tomcat) запускается как служба Windows, System.getProperty("user.name") или System.getenv(). Get ("USERNAME") возвращают пользователя, который запустил службу, а не пользователя. текущий вошедший в систему имя пользователя.

Также в Java 9 классы NTSystem и т.д. Не будут доступны

Итак, обходной путь для Windows: вы можете использовать wmic, поэтому вам нужно выполнить следующую команду

wmic ComputerSystem get UserName

Если доступно, будет возвращен вывод формы:

UserName
{domain}\{logged-in-user-name}

Примечание. Для окон необходимо использовать cmd/c в качестве префикса, поэтому ниже приведена примерная программа:

    Process exec = Runtime.getRuntime().exec("cmd /c wmic ComputerSystem get UserName".split(" "));
    System.out.println(exec.waitFor());
    try (BufferedReader bw = new BufferedReader(new InputStreamReader(exec.getInputStream()))) {
        System.out.println(bw.readLine() + "\n" + bw.readLine()+ "\n" + bw.readLine());
    }