Имя текущего компьютера 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());
}