Как исправить доступ к запрошенному ресурсу, который запрещен в Tomcat?
-
22-09-2019 - |
Вопрос
Я хочу включить аутентификацию на основе форм, используя базу данных в качестве области, но я всегда получаю это сообщение всякий раз, когда пытаюсь пройти аутентификацию в качестве менеджера Tomcat в Tomcat 6.Я уже создал таблицы user_name и user_roles и сопоставил имя пользователя (синий) с администратором и менеджером как роль в таблице user_roles в MySQL, но я все еще не могу пройти аутентификацию.Я уже воссоздал тег области в server.xml
файл:
<Realm className = "org.apache.catalina.realm.JDBCRealm"
debug = "99"
driverName = "com.mysql.jdbc.Driver"
connectionURL = "jdbc:mysql://localhost:3306/mail"
connectionName = "root"
userTable = "users"
userNameCol = "user_name"
userCredCol = "user_pass"
userRoleTable = "user_roles"
roleNameCol = "role_name"
/>
Может ли кто-нибудь сказать мне, что я делаю не так, и как включить аутентификацию на основе форм с помощью базы данных?
Я объявил пользователя «синим» как администратором и менеджером, и когда я пытаюсь войти на страницу менеджера Tomcat, он выдает мне сообщение:
Статус HTTP 403 — доступ к запрошенному ресурсу запрещен.
Когда я ввожу неправильное имя пользователя или пароль, Tomcat снова запрашивает имя пользователя и пароль вместо того, чтобы показывать это сообщение.
Решение
Я сам этого не пробовал.Можете ли вы попробовать изменить метод авторизации в TOMCAT_HOME_DIR\webapps\manager\WEB-INF\web.xml
чтобы указать метод аутентификации, установленный в FORM.Имя региона не имеет значения.
<login-config> <auth-method>FORM</auth-method> <realm-name>Tomcat Manager Application</realm-name> </login-config>
Также просто подтвердите — вам нужно будет сохранить только одну область в файле server.xml, закомментируйте область по умолчанию.
Другие советы
Статус HTTP 403 (Доступ к запрошенному ресурсу запрещен) может указывать на то, что вы ввели слишком много неправильных учетных данных или у вас возникли проблемы с конфигурацией.
Одна из возможных проблем может заключаться в том, что ваш браузер может кэшировать ваши учетные данные для аутентификации, поскольку при использовании BASIC-аутентификации ваш браузер будет запрашивать учетные данные только при первой аутентификации на вашем сайте.После успешной аутентификации он не будет запрашивать вас снова, и чтобы ваш браузер снова запрашивал вас, иногда вам нужно полностью закрыть браузер (или попробовать использовать другой веб-браузер).
Если вы не меняли какие-либо файлы конфигурации, проверьте файл conf/tomcat-users.xml
в вашей установке (locate tomcat-users.xml
).Этот файл должен содержать учетные данные, позволяющие вам использовать веб-приложение Tomcat.
Например, чтобы добавить роль менеджера-gui пользователю с именем tomcat
с паролем s3cret
, добавьте следующее в файл конфигурации, указанный выше:
<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
Затем вы можете получить доступ к своему менеджеру веб-приложений из /manager/html
(например.перезагрузка после изменения конфигурации).
Читать далее: Приложение Manager: инструкции
Если вы пытаетесь реализовать собственное ограничение безопасности (в 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
.Коллекция веб-ресурсов определяет части нашего приложения, требующие аутентификации.А/*
указывает, что все приложение требует аутентификации.Ограничение аутентификации определяет роль, которую должен иметь пользователь для доступа к защищенным ресурсам.Транспортная гарантия ограничения пользовательских данных может бытьNONE
,CONFIDENTIAL
илиINTEGRAL
.Мы установили его наNONE
, что означает, что перенаправление наSSL
не требуется при попытке доступа к защищенному ресурсу.
Также убедитесь, что у вас есть строка:
<Realm className="org.apache.catalina.realm.MemoryRealm" />
внутри твоего conf/server.xml
(Engine
раздел).
Если проблема не устранена, попробуйте:
- проверьте, правильный ли вы редактируете XML-файл,
- проверьте ваши XML-файлы, например.
catalina.sh configtest
илиxmlstarlet val /etc/tomcat?/*.xml /var/lib/tomcat7/webapps/*/WEB-INF/*.xml
, - твой
<url-pattern>
совпадения в вашем<security-constraint>
или установите на/*
, - проверьте журналы Tomcat (например.
/var/log/tomcat7
), - увеличить уровень логирования (
INFO
->FINE
/FINEST
) вlogging.properties
илиlog4j.properties
(ИНФОРМАЦИЯ, СЕРЬЕЗНАЯ, ПРЕДУПРЕЖДЕНИЕ, ИНФОРМАЦИЯ, КОНФИГ, ОТЛИЧНАЯ, ТОЧНАЯ, ЛУЧШАЯ или ВСЕ), перезапустите Tomat и проверьте журналы, - если в журналах ничего нет, проверьте, правильные ли вы проверяете журналы (
sudo lsof | grep -E "java.*(out|txt|log)$"
,tail -f /var/log/tomcat7/*.log /var/log/tomcat7/*.txt /var/log/tomcat7/*.out
), - когда используешь
log4j
систему регистрации, убедитесь, что вы инициализировал его правильно путем размещения библиотек иlog4j.properties
в нужную папку и настроим ее, проверьте аутентификацию BASIC с помощью cURL:
без учетных данных:
$ curl -vv http://example.com:8983/solr/
Обычно запрос должен вернуться HTTP/1.1 401 Неавторизованный и "WWW-аутентификация" в заголовке должно быть указано Базовый требуется аутентификация.
с учетными данными:
$ curl -vv -u tomcat:tomcat http://example.com:8983/solr/
Запрос должен быть отправлен с заголовком «Авторизация» и должен пройти аутентификацию.Если ваши учетные данные недействительны, вы должны получить: HTTP/1.1 401 Неавторизованный.Если пользователь аутентифицирован, но не имеет доступа для просмотра ресурса, вы должны получить: HTTP/1.1 403 Запрещено.
возможно, был активирован механизм блокировки пользователя для слишком много неудачных попыток аутентификации (LockOutRealm),
остановите и запустите Tomcat вручную (так же, как и в:
ps wuax | grep ^tomcat
), например:# ps wuax | grep ^tomcat tomcat7 884 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties ... org.apache.catalina.startup.Bootstrap start $ /etc/init.d/tomcat7 stop $ sudo sudo -u tomcat7 /usr/lib/jvm/java-7-openjdk-amd64/bin/java ... -Dorg.apache.catalina.level=FINEST org.apache.catalina.startup.Bootstrap start
Альтернативно начните использовать
catalina.sh
сценарий типа:$ . /etc/default/tomcat7 $ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 CATALINA_HOME=/usr/share/tomcat7 CATALINA_BASE=/var/lib/tomcat7 CATALINA_PID=/var/run/tomcat7.pid CATALINA_TMPDIR=/tmp LOGGING_CONFIG="-Dorg.apache.catalina.level=FINEST" $ /usr/share/tomcat7/bin/catalina.sh run
Или в Режим отладки:
$ JPDA_SUSPEND=y catalina.sh jpda start
и проверь свой
catalina.out
бревно.В крайнем случае, необходимо отладить процесс:
sudo strace -fp PID
.
Вам необходимо определить другую роль пользователя с именем «tomcat» и сделать пользователя «синий» членом этой группы.
Вы можете изменить имя группы ролей, необходимое для этого ограничения, в файле web.xml:
<auth-constraint>
<role-name>tomcat</role-name>
</auth-constraint>
Когда я использовал аутентификацию BASIC, я получил ту же ошибку «HTTP-статус 403 — доступ к запрошенному ресурсу запрещен» вместо всплывающего окна. Я использовал свою роль настройки (мое имя), но это не сработало.Итак, я установил роль (manager-gui) и назначил ей имя пользователя и пароль.После установки я получил требуемый результат.Используйте менеджер-gui в качестве роли и повторите попытку.