Получение зарегистрированного имени пользователя и имени хоста в Windows
В настоящее время я пишу Java-приложение, которое будет использоваться с Windows-машиной, авторизованной с ActiveDirectory. В основном приложение должно знать только имя пользователя и имя хоста. Я знаю, что есть
System.getProperty("user.name")
а также
java.net.InetAddress.getLocalHost().getHostName()
Но я не уверен, что System.getProperty("user.name") будет правильно работать с виртуальной машиной, работающей в Windows (я искал в Google и обнаружил множество потоков, в которых говорится, что он может не работать с Windows, поскольку он может возвращать что-то другое, в зависимости от переменных среды (и в настоящее время я не могу это проверить [я использую ubuntu и archLinux]).
Итак, я подумал, есть ли лучший и более безопасный способ справиться с этим, и наткнулся на NTSystem. Но NTSystem, похоже, недоступна в Linux (которую я использую для разработки), что, как мне кажется, связано с вызовом собственного кода Windows.
Следовательно, мой вопрос будет таким: "Есть ли безопасный способ восстановить имя пользователя, вошедшего в систему, в Windows, и если да, то как бы вы это сделали?"
2 ответа
user.name
изначально небезопасен, потому что может быть переопределен через -Duser.name=XYZ
, Это может быть проблемой для вас, или это не может быть
очевидно NTSystem
не будет работать в Linux, но вы упоминаете, что пишете графический интерфейс для запуска в Windows. Вы пытаетесь проверить имя пользователя Windows? Вы можете сделать это через NTSystem
встроенный в код, который работает на клиенте Windows, но не (конечно) код, который работает под Linux OS
,
Или вы пытаетесь проверить их на сервере Linux? Возможно, у вас есть kerberos
домен вы могли бы сделать это? (т.е. если есть kerberos
домен, то вы можете иметь безопасную аутентифицированную связь между клиентом и сервером, гарантируя, что клиент является тем, кем они себя называют)
РЕДАКТИРОВАТЬ: Я могу быть смущен тем фактом, что вы говорите, что вы пишете Java-приложение "в Linux". Я понял это как сервер Linux и клиент Windows - но, возможно, вы просто имеете в виду, что вы используете Lenux в качестве среды разработки? В этом случае вы можете написать сменный слой идентификации, который вы можете переключать между NTSystem
на коробке Windows и user.name
для тестирования
Используйте JNA, com.sun.platform.jna.win32 имеет несколько методов, чтобы сделать это, оборачивая Win32 API. Попробуйте Advapi32Util.getUserName или Kernel32Util.getUserNameEx.