Переменная Системная среда Java Текущий пользователь

StackOverflow https://stackoverflow.com/questions/1001905

  •  05-07-2019
  •  | 
  •  

Вопрос

Какой лучший способ получить текущего зарегистрированного пользователя через приложение Java, работающее на JBoss. Системная переменная среды System.getProperty (" user.name ") не работает, так как JBoss работает как служба.

Приложение работает на ноутбуке под управлением Windows XP. Приложение имеет веб-интерфейс и доступ к нему осуществляется с помощью Internet Explorer определенным вошедшим в систему пользователем Windows. Только 1 пользователь Windows может быть авторизован одновременно. Приложению необходимо знать, какой пользователь выполнил вход в систему, чтобы сделать меню на основе ролей и функции безопасности. Таким образом, и клиент (Internet Explorer), и сервер (JBoss) работают на одном ноутбуке. В настоящее время мы определяем вошедшего в систему пользователя с помощью tasklist / v, а затем анализируем выходные данные для поиска определенных процессов и пользователя, выполняющего их. Тем не менее, необходимо знать, есть ли более чистый способ получения авторизованного пользователя Windows.

Это было полезно?

Решение

Я не думаю, что вопрос действительно имеет большой смысл. На хосте может быть нет пользователей, или может быть несколько пользователей.

Я бы с некоторой осторожностью относился к дизайну, который действительно хотел бы знать это - веб-приложения не должны интересоваться подобными вещами, IMO. Что ты пытаешься сделать?

Другие советы

Предполагается, что вы сохранили переменную среды с именем USERNAME, когда пользователь вошел в систему:

String username = System.getenv("USERNAME");

Или, если вы хотите полный набор переменных среды:

Map<String, String> envMap = System.getenv();

Затем выполните итерацию по карте, чтобы получить переменную среды, в которой вы сохраняете имя пользователя.

Map<String, String> envMap = System.getenv();
int mapsize = envMap.size();
Iterator i = envMap.entrySet().iterator();
for (int j = 0; j < mapsize; j++) {
    Map.Entry entry = (Map.Entry) i.next();
    Object key = entry.getKey();
    Object value = entry.getValue();
}

Используйте аутентификацию JAAS. Вы должны быть в состоянии использовать NTLM в Windows, чтобы пользователю не пришлось выполнять дополнительную работу. Затем на сервере вы можете использовать контекст безопасности для получения принципала звонящего.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top