HTTP-статус 403 (доступ к запрошенному ресурсу запрещен) может указывать на то, что вы ввели слишком много неверных учетных данных или у вас возникли проблемы с конфигурацией.
Одной из возможных проблем может быть то, что ваш браузер может кэшировать ваши учетные данные для аутентификации, поскольку при аутентификации BASIC ваш браузер запрашивает учетные данные только при первой аутентификации на вашем сайте. После успешной аутентификации он не будет запрашивать вас снова и заставлять ваш браузер запрашивать снова, иногда вам необходимо полностью закрыть браузер (или попробовать с другим веб-браузером).
Если вы не изменили какие-либо файлы конфигурации, проверьте файл 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
Если вы пытаетесь реализовать собственное ограничение безопасности (в 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
секции).
Если проблема не устранена, попробуйте:
- проверьте, правильно ли вы редактируете 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
(INFO, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, FINEST, FINEST или ВСЕ), перезапустите Tomat и проверьте логи,
- если в журналах ничего нет, проверьте, проверяете ли вы правильные журналы (
sudo lsof | grep -E "java.*(out|txt|log)$"
, tail -f /var/log/tomcat7/*.log /var/log/tomcat7/*.txt /var/log/tomcat7/*.out
),
- при использовании системы регистрации
log4j
, убедитесь, что правильно инициализировали ее , поместив libs и log4j.properties
в нужную папку и настроив ее,
проверка подлинности BASIC с помощью cURL:
без учетных данных:
$ curl -vv http://example.com:8983/solr/
Обычно запрос должен возвращать HTTP / 1.1 401 Unauthorized , а заголовок " WWW-Authenticate " должен указывать Basic Требуется аутентификация.
с учетными данными:
$ curl -vv -u tomcat:tomcat http://example.com:8983/solr/
Запрос должен быть отправлен с заголовком «Авторизация», и он должен аутентифицироваться. Если ваши учетные данные недействительны, вы должны получить: HTTP / 1.1 401 Unauthorized . Если пользователь аутентифицирован, но не имеет доступа к просмотру ресурса, вы должны получить: 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
.