Извлечение зарегистрированного имени пользователя и имени хоста в Windows - PullRequest
1 голос
/ 16 июля 2009

В настоящее время я пишу Java-приложение, которое будет использоваться с Windows-машиной, авторизованной с ActiveDirectory. В основном приложение должно знать только имя пользователя и имя хоста. Я знаю, что есть

System.getProperty("user.name")

и

java.net.InetAddress.getLocalHost().getHostName()

Но я не уверен, что System.getProperty ("user.name") будет правильно работать с виртуальной машиной, работающей в Windows (я искал в Google и обнаружил множество потоков, сообщающих, что может не работать с окна, поскольку это может вернуть что-то другое, в зависимости от переменных среды (и я в настоящее время не могу проверить это [я использую ubuntu и archLinux]).

Итак, я подумал, есть ли лучший и более безопасный способ справиться с этим, и наткнулся на NTSystem . Но NTSystem, по-видимому, недоступна в Linux (которую я использую для разработки), что, как мне кажется, связано с вызовом собственного кода Windows.

Следовательно, мой вопрос будет звучать так: «Есть ли безопасный способ восстановить имя пользователя, вошедшего в систему, в Windows, и если да - как бы вы этого достигли?»

Ответы [ 2 ]

1 голос
/ 01 октября 2010

Использование JNA , com.sun.platform.jna.win32 имеет несколько методов, позволяющих обернуть Win32 API. Попробуйте Advapi32Util.getUserName или Kernel32Util.getUserNameEx.

1 голос
/ 16 июля 2009

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 для тестирования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...