Получите имя пользователя клиента, который подключился к веб -серверу
-
26-10-2019 - |
Вопрос
Вот сценарий. Я запускаю код на веб -сервере в рекламном домене. Некоторый клиент подключился ко мне. Как получить имя пользователя этого клиента, не заставляя клиента заполнить форму в их браузере? Необходимо использовать Java Technologies на стороне веб -сервера.
редактировать:
Я закончил тем, что использовал фильтр «Договорный» Spring Security, как описано по приведенной ниже ссылке. Доступно учебник. С использованием request.getPrincipal (). getName () Изнутри сервлета дает имя пользователя.
Решение
Вам нужно настроить Spring Security Extension Kerberos - Это единственный из ящика, чтобы сделать то, что вы описываете в Spring Security 3. Это поддерживает переговоры SPNEGO, но требует некоторого количества настройки на сервере (и знания о том, как работает Spnego и Kerberos).
Там не так много документации - но примерные приложения Майка, которые он поставляется с 1,0 м2, великолепны, и охватывают большинство общих сценариев, включая автоматизированную аутентификацию Spnego.
Ключевая вещь для Spnego - это настроить пользовательский AuthenticationEntryPoint
- Вам нужно сделать это с помощью пользовательского весеннего боба следующим образом:
<bean id="kerbEntryPoint" class="org.springframework.security.extensions.kerberos.web.SpnegoEntryPoint" />
<bean id="kerbAuthenticationProcessingFilter" class="org.springframework.security.extensions.kerberos.web.SpnegoAuthenticationProcessingFilter">
<property name="authenticationManager" ref="authenticationManager" />
</bean>
... Есть больше бобов, которые потребуются помимо них (опять же, см. Образцы с расширением Kerberos). Опубликуйте обратно, если вы пойдете дальше вместе с Spring Security или если вам нужны точные подробности (поскольку есть несколько бобов / конфигурации, некоторые знания о вашей конфигурации будут полезны, например, используете ли вы <http>
Стиль пространства имен или нет).
Кроме этой опции, вам придется настроить аналогичный тип Auth Spnego Auth (например, использование Waffle, как вы предлагаете) - другие вопросы Накрыть это довольно хорошо.
Наконец, вы могли бы лучше передать с другим веб -сервером, который лучше поддерживает SPNEGO или NTLM, такой как Microsoft IIS или Apache Web Server с mod_spnego.
Надеюсь, одна из этих идей подойдет для вас!
Другие советы
Какой браузер использует ваши пользователи? Если т. Е.; есть простое решение:
<html>
<script type="text/javascript">
var WinNetwork = new ActiveXObject("WScript.Network");
alert(WinNetwork.UserName);
</script>
</html>
Последний способ для Windows это Spnego. Анкет Чтобы он был полностью работать, вам нужен сервер, чтобы иметь учетную запись в объявлении и общаться с Kerberos. Затем, как мне сказали, Spring Security поддерживает это.
Теперь, не всегда вам нужно авторизовать пользователей. Иногда (например, по причинам статистики) этого достаточно, чтобы получить идентификатор рекламы пользователя. Когда я играл со Spnego, бинарные данные, которые были переданы из браузера, включали идентификатор пользователя в четком тексте. Его можно извлечь оттуда, но, конечно, нельзя доверять.
NTLM устарел, считается менее безопасным и в значительной степени выкатывается из среды.
Если вы используете Tomcat, то используйте Вафель.
Могу поспорить, что вы можете поместить веб -сервер Apache перед Tomcat, чтобы Apache могла аутентифицировать, используя Ntlm или же Kerberos. Анкет Затем вы можете использовать правила переписывания для отправки запросов в Tomcat с именем пользователя на равнине. Это просто идея, я сам не реализовал это. Однако мы используем аутентификацию Apache Kerberos в нашей интрасети. Мое предложение - не использовать NTLM, он устарел и сложен.