Как использовать защиту htpasswd в Tomcat?
Я уже создал файл базы данных пользователя с помощью команды Apache htpasswd. Этот файл теперь используется несколькими другими приложениями, такими как apache и subversion.
Пользователи в создаются так:
htpasswd /path/to/users.htpasswd peter
Этот файл пользователя является глобальным, а не для каждого каталога.
Как я могу заставить Tomcat 6 использовать этот же файл в качестве области безопасности?
3 ответа
Есть два варианта:
Используйте Apache в качестве внешнего интерфейса для Tomcat (используя либо mod_jk, либо mod_proxy_ajp), и Apache выполняет аутентификацию. Вы можете найти подробности о том, как это сделать, здесь
Если вы хотите, чтобы tomcat выполнял аутентификацию, вам не нужно использовать что-то другое, кроме файла htpasswd. Существует 4 способа сохранить учетные данные пользователей - с помощью базы данных, JNDI/LDAP, файла XML или поставщика JAAS. Вы можете прочитать обо всех параметрах в разделе Конфигурация области.
Чтобы обеспечить безопасный доступ к веб-приложению Tomcat, вы можете реализовать простое ограничение безопасности (например, в /var/lib/tomcat7/webapps/*/WEB-INF/web.xml
) как показано ниже (просто добавьте его перед </web-app>
окончание):
<!-- This security constraint protects your webapp interface. -->
<login-config>
<!-- Define the Login Configuration -->
<auth-method>BASIC</auth-method>
<realm-name>Webapp</realm-name>
</login-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
<!-- Specifying a Secure Connection -->
<user-data-constraint>
<!-- transport-guarantee can be CONFIDENTIAL (forced SSL), INTEGRAL, or NONE -->
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<!-- Authorization, see: tomcat-users.xml -->
<security-role>
<role-name>*</role-name>
</security-role>
Элемент login-config содержит
auth-method
элемент, который определяет метод аутентификации, который мы используем, который являетсяBASIC
,security-constraint
элемент содержит 3 элемента:web-resource-collection
,auth-constraint
, а такжеuser-data-constraint
, Коллекция web-ресурсов определяет части нашего приложения, которые требуют аутентификации./*
указывает, что для всего приложения требуется аутентификация. Ограничение auth определяет роль, которую должен иметь пользователь для доступа к защищенным ресурсам. Транспортная гарантия ограничения пользовательских данных может бытьNONE
,CONFIDENTIAL
или жеINTEGRAL
, Мы установили этоNONE
, что означает, что перенаправление наSSL
не требуется при попытке попасть на защищенный ресурс.
Также убедитесь, что у вас есть строка:
<Realm className="org.apache.catalina.realm.MemoryRealm" />
внутри вашего conf/server.xml
(Engine
раздел).
Если вы не изменили какие-либо файлы конфигурации, пожалуйста, проверьте файл conf/tomcat-users.xml
в вашей установке (locate tomcat-users.xml
). Этот файл должен содержать учетные данные, чтобы вы могли использовать веб-приложение Tomcat.
Например, чтобы добавить роль manager-gui пользователю с именем tomcat
с паролем s3cret
добавьте следующее в конфигурационный файл, указанный выше:
<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
Затем вы можете получить доступ к своему менеджеру веб-приложений из /manager/html
(например, перезагрузка после изменения конфигурации).
Подробнее: Менеджер приложения HOW-TO.
Затем перезапустите Tomcat, и при доступе к вашему веб-приложению он должен запросить правильные учетные данные.
Смотрите также:
- Базовая аутентификация HTTP в Java на сайте Oracle
- Указание механизма аутентификации в Java на сайте Oracle
- Конфигурация области, как на сайте Apache Tomcat
- Настройка безопасности на основе ролей в Tomcat
- Как использовать обычную аутентификацию с Tomcat?
Наиболее похожим на htpasswd может быть MemoryRealm. У меня были проблемы с тем, чтобы найти простой пример, как его использовать, поэтому я опубликую простой пример кода здесь:
Установите роль, имя пользователя и пароль в tomcat-users.xml
Ваш web.xml должен содержать что-то вроде:
<security-constraint> <web-resource-collection> <web-resource-name> My Protected WebSite </web-resource-name> <url-pattern> /* </url-pattern> <http-method> GET </http-method> <http-method> POST </http-method> </web-resource-collection> <auth-constraint> <!-- the same like in your tomcat-users.conf file --> <role-name> test </role-name> </auth-constraint> </security-constraint> <login-config> <auth-method> BASIC </auth-method> <realm-name> Basic Authentication </realm-name> </login-config> <security-role> <description> Test role </description> <role-name> test </role-name> </security-role>
Добавьте это в ваш файл server.xml:
<Realm className="org.apache.catalina.realm.MemoryRealm"></Realm>