Недавно я развернул веб-приложение Java на Tomcat7 под управлением Apache2 на Ubuntu 14.04 VPS.
Я подключаю Apache2 и Tomcat7 с помощью mod_jk.
Все статические ресурсы принадлежат серверу Tomcat, но я хотел поставить перед ним Apache для лучшей практики, будущей масштабируемости и, возможно, использовать несколько модов в будущем.
Все работает отлично, пока я не хочу реализовать всплывающее окно базовой аутентификации, которое будет использоваться во время периода тестирования - я хочу, чтобы только несколько друзей получили доступ к сайту, и я готов создать учетную запись для каждого человека.
Я планирую удалить базовую аутентификацию после завершения фазы тестирования. Проблематично только всплывающее окно auth - если я удалю директивы auth, сайт будет работать нормально.
Файл .war называется bbn (и Tomcat взрывает его), так что на данный момент я доволен простым доступом к приложению с помощью http: // сервер / bbn - идеальный.
Вот соответствующий конфиг:
@ Tomcat server.xml:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
@ worker.properties:
worker.list=worker
worker.worker.type=ajp13
worker.worker.host=localhost
worker.worker.port=8009
@ apache2 / доступные моды / jk.conf:
JkWorkersFile /etc/apache2/workers.properties
@ apache2 / conf-enabled / security.conf:
<Directory />
Options -ExecCGI -Includes -Indexes
AllowOverride None
Order Deny,Allow
Deny from all
</Directory>
(это блокирует Apache, поскольку я просто хочу использовать его для «проксирования»)
@ apache2 / sites-enabled / 000-default.conf:
JKMount /bbn* worker
(чтобы все запросы, начинающиеся с / bbn, отправлялись в Tomcat)
С приведенным выше конфигом все нормально. Но мне нужно всплывающее окно простой аутентификации, поэтому я добавил в 000-default.conf:
<Location /bbn>
AuthType Basic
AuthName "bbn"
AuthUserFile /var/bbn/bbnusers.config
Require valid-user
Order allow,deny
Allow from all
</Location>
Я создал несколько пользователей с htpasswd
команда, которая создает правильно сформированный файл и отлично добавляет в него пользователей.
Вот и проблема: когда я хочу получить доступ http: // сервер / bbn, Я получаю всплывающее окно аутентификации (это нормально), я ввожу имя пользователя / пароль, а затем:
Я вижу, что попал в .jsp веб-приложения (вернул правильный HTML-код), отлично!
Однако для каждого ресурса, который должен быть загружен, такого как изображения, js и css, я получаю новое всплывающее окно аутентификации (примечание: если я введу туда правильные учетные данные, я ничего не получу).
Я провел несколько часов с другом, пробуя альтернативные конфигурации и пути, но вот и все - либо все получают доступ, либо никто ... Что я не могу принять в данный момент.
Как я могу решить эту проблему?
Я не хочу использовать tomcat-users.xml и такие механизмы, поскольку это должно обрабатываться @ Apache и не требовать каких-либо изменений, связанных с Java (по крайней мере, web.xml ..)
Спасибо !!!
=========== Редактировать: дополнительная информация:
/server/bbn
я вижу "GET /bbn HTTP/1.1" 401
(401 нормальный, я полагаю, поскольку я получаю всплывающее окно авторизации) в журналах apache. Если я затем снова введу правильные учетные данные в появившемся сразу же всплывающем окне, я увижу тот же запрос в журналах (GET / bbn) также с 401, но я также увижу предоставленное имя пользователя перед меткой времени ... Затем, если я нажму escape или нажмите «Отмена» во всплывающем окне, будет отображаться страница jsp с ошибкой Tomcat и всплывающее окно авторизации появляется для каждого ресурса (js, css, изображения). Независимо от того, ввожу ли я правильные учетные данные или нет, я не получу ресурсы (я вижу html страницы, я уверен, что учетные данные верны ...)
И последнее: если я попытаюсь получить, например, http: //server/bbn/img/flags/EARTH.gif вместо того http: // сервер / bbn / (домашняя страница) Я получаю то же самое обращение
Я полагаю, что аутентификация apache не должна мешать классической аутентификации Spring Security, которая обрабатывается в Tomcat на Java. Тем более, что значение коннектора по умолчанию - «tomcatAuthentication = 'true'» - я ожидаю, что Apache2 будет работать как «одноразовый стена доступа ", прежде чем люди смогут протестировать сайт, может быть, я искажаю логику здесь ..
Поскольку время уходит и я начинаю подозревать, что этот механизм на самом деле не подходит для моего варианта использования (в частности, конфликтует с фактическими сеансами tomcat), я удалил аутентификацию Apache и создал перехватчик Java, который проверяет, является ли специальный токен в сеансе - в противном случае перенаправляет вас на простую страницу с формой.
Таким образом, люди все еще могут регистрироваться / входить в систему и т. Д. После того, как они попадают на настоящий сайт после заполнения формы "доступа". Это не идеально, но как временная мера во время тестов для личного проекта, который подойдет!