Форма входа в Java EE с балансировщиком нагрузки, преобразовывающая https в http
У меня есть проблема, и я считаю, что она сводится к несовместимости с нашим балансировщиком нагрузки, веб-сервером (ihs), конфигурацией https и безопасностью форм Java EE с помощью j_security_check.
Я понимаю, что когда клиент пытается перейти на защищенную страницу, сервер (websphere) отправляет перенаправление с URL-адресом формы входа, что мы и видим в нашей среде dev & tst. Однако производственная установка имеет веб-сервер (ihs), который потребляет URL-адрес https, выбивает s и пересылает URL-адрес http в веб-сферу (известный как разгрузка ssl). Когда Websphere отвечает перенаправлением, он делает это без https, но с http://server-name/loginform
и я вижу ошибку браузера, что он не может получить доступ к http://server-name/loginform
,
Соответствующая часть web.xml:
<security-constraint>
<web-resource-collection>
<web-resource-name>Whitelist</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>authenticated-users</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>login</web-resource-name>
<url-pattern>/keepalive</url-pattern>
<url-pattern>/signin</url-pattern>
<url-pattern>/signin/error</url-pattern>
<url-pattern>/resources/*</url-pattern>
</web-resource-collection>
</security-constraint>
<security-role>
<description>Any LDAP authenticated user</description>
<role-name>authenticated-users</role-name>
</security-role>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/signin</form-login-page>
<form-error-page>/signin/error</form-error-page>
</form-login-config>
</login-config>
Мне интересно, является ли это неправильной конфигурацией на стороне Java (моя ответственность), я ожидаю URL в form-login-page
(/ логин) быть относительным в браузере. Но я также считаю, что балансировщик нагрузки должен автоматически преобразовывать http call
в https call
(чужая ответственность). Я надеюсь, что у кого-то есть предложения.
1 ответ
Вы должны предоставить немного больше информации в своем вопросе, например, какой балансировщик нагрузки вы используете, идет ли он прямо в WAS или через IHS, как настроено ваше веб-приложение (web.xml
).
Итак, вот несколько общих советов, которые могут быть полезны для вас.
Перенаправление на SSL в WebSphere
Если у вас уже настроена защита и форма входа в систему правильно отображается в http, вам просто нужно добавить следующее в web.xml
:
<security-constraint>
...
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Это гарантирует, что WebSphere будет генерировать перенаправление на https, когда клиент пытается получить доступ к защищенным страницам.
Разгрузка SSL
Если ваш балансировщик нагрузки настроен на разгрузку SSL-запросов и запросов в WebSphere с использованием обычного http, то вам необходимо настроить WebSphere, чтобы знать об этом. Это делается путем настройки настраиваемого свойства httpsIndicatorHeader и добавления настраиваемого заголовка в балансировщик нагрузки.