Я недавно развернул Java webapp на Tomcat7 перед Apache2 на Ubuntu 14.04 VPS.
Я соединяю Apache2 и Tomcat7 с помощью mod_jk.
Все статические ресурсы находятся на сервере Tomcat, но я хотел поставить перед ним Apache для лучшей практики, будущей масштабируемости и для возможного использования нескольких модов в будущем.
Все работает отлично, пока я не хочу реализовать всплывающее окно базовой аутентификации, которое будет использоваться в период тестирования - я хочу, чтобы только несколько друзей получили доступ к сайту и готов создать учетную запись для каждого человека.
Я планирую убрать базовую аутентификацию после завершения этапа тестирования. Проблема только во всплывающем окне аутентификации - если я удалю директивы аутентификации, сайт будет работать отлично.
Файл .war имеет имя bbn (и взрывается Tomcat), поэтому на данный момент меня устраивает простой доступ к приложению с помощью http://server/bbn - отлично.
Вот соответствующий конфиг :
@Tomcat's server.xml :
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
@workers.properties :
worker.list=worker
worker.worker.type=ajp13
worker.worker.host=localhost
worker.worker.port=8009
@apache2/mods-available/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://server/bbn, я получаю всплывающее окно авторизации (что нормально), я ввожу имя пользователя/пароль, затем:
Я вижу, что попал в .jsp webapp (я получаю правильный html обратно), отлично!
Однако для каждого ресурса, который должен быть загружен, такого как изображения, js и css, я получаю новое всплывающее окно авторизации (примечание: если я ввожу правильные учетные данные, я ничего не получаю).
Я провел несколько часов с другом, пробуя альтернативные конфигурации и пути, но это все - либо все получают доступ, либо никто... Что я не могу принять в данный момент.
Как я могу решить эту проблему?
Я не хочу использовать tomcat-users.xml и подобные механизмы, так как это должно быть обработано @ Apache и не требует никаких модификаций, связанных с java (web.xml по крайней мере...)
Спасибо !!!
=========== Edit : дополнительная информация:
/server/bbn
При GET "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://server/bbn/ (домашняя страница) я получаю точно такое же обращение
Я полагаю, что apache auth не должен мешать классической Spring Security Authentication, которая обрабатывается в Tomcat в Java... Тем более, что значение коннектора по умолчанию "tomcatAuthentication='true'" - я ожидаю, что Apache2 будет работать как "стена одноразового доступа", прежде чем люди смогут протестировать сайт, возможно, я искажаю логику...
По мере того, как время идет, и я начинаю чтобы подозревать, что этот механизм на самом деле не подходит для моего варианта использования (в частности, конфликтует с фактическими сеансами tomcat), я удалил аутентификацию Apache и создал перехватчик Java, который проверяет, есть ли в сеансе специальный токен - если это не так,он перенаправляет вас на простую страницу с формой.
Таким образом, люди все еще могут регистрироваться / входить в систему и т. Д., Как только они попадают на настоящий сайт после заполнения формы «доступа». Это не идеально, но как временная мера во время тестов для личного проекта, который подойдет!