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

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

Вопрос

Вот сценарий. Я запускаю код на веб -сервере в рекламном домене. Некоторый клиент подключился ко мне. Как получить имя пользователя этого клиента, не заставляя клиента заполнить форму в их браузере? Необходимо использовать Java Technologies на стороне веб -сервера.

редактировать:

Я закончил тем, что использовал фильтр «Договорный» Spring Security, как описано по приведенной ниже ссылке. Доступно учебник. С использованием request.getPrincipal (). getName () Изнутри сервлета дает имя пользователя.

http://waffle.codeplex.com/

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

Решение

Вам нужно настроить 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, он устарел и сложен.

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