Вопрос или проблема
У меня ошибка при попытке получить доступ к консоли управления Tomcat (Apache Tomcat/8.0.50).
ПРЕДУПРЕЖДЕНИЕ [http-apr-8080-exec-7]
org.apache.catalina.realm.LockOutRealm.filterLockedAccounts Попытка
была сделана для аутентификации заблокированного пользователя “admin”
Я изменил конфигурационный файл “tomcat-users.xml” и перезапустил Tomcat
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<user username="admin" password="!w@B@#7XTFj" roles="manager-gui,admin-gui" />
Информация о “realm” в server.xml
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- Этот Realm использует UserDatabase, настроенную в глобальных JNDI
ресурсах под ключом "UserDatabase". Любые изменения,
которые выполняются с этим UserDatabase, сразу
доступны для использования Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
и о “Resources”
<GlobalNamingResources>
<!-- Редактируемая пользовательская база данных, которая также может использоваться
UserDatabaseRealm для аутентификации пользователей
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="Пользовательская база данных, которая может быть обновлена и сохранена"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<Resource name="jdbc/ERS"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@servername:port:BDD_name"
username="SAU_BIS"
password="V0t0,z91!"
maxActive="100000"
maxIdle="100000" />
</GlobalNamingResources>
Я добавил уровень журнала: org.apache.catalina.realm.level = FINE и у меня есть эта информация:
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[JMX Proxy interface]' по GET /status --> false
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[Status interface]' по GET /status --> true
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[HTML Manager interface (for humans)]' по GET /status --> false
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[Text Manager interface (for scripts)]' по GET /status --> false
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[JMX Proxy interface]' по GET /status --> false
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[Status interface]' по GET /status --> true
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[HTML Manager interface (for humans)]' по GET /status --> false
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[Text Manager interface (for scripts)]' по GET /status --> false
13-Мар-2020 08:19:08.515 FINE [http-apr-8080-exec-4] org.apache.catalina.realm.RealmBase.hasUserDataPermission Ограничение пользовательских данных не имеет ограничений
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[JMX Proxy interface]' по GET /status --> false
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[Status interface]' по GET /status --> true
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[HTML Manager interface (for humans)]' по GET /status --> false
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[Text Manager interface (for scripts)]' по GET /status --> false
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[JMX Proxy interface]' по GET /status --> false
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[Status interface]' по GET /status --> true
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[HTML Manager interface (for humans)]' по GET /status --> false
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.findSecurityConstraints Проверка ограничения 'SecurityConstraint[Text Manager interface (for scripts)]' по GET /status --> false
13-Мар-2020 08:19:24.345 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.RealmBase.hasUserDataPermission Ограничение пользовательских данных не имеет ограничений
13-Мар-2020 08:19:24.361 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.CombinedRealm.authenticate Попытка аутентификации пользователя "admin" с realm "org.apache.catalina.realm.UserDatabaseRealm"
13-Мар-2020 08:19:24.361 FINE [http-apr-8080-exec-5] org.apache.catalina.realm.CombinedRealm.authenticate Не удалось аутентифицировать пользователя "admin" с realm "org.apache.catalina.realm.UserDatabaseRealm"
Но все равно невозможно получить доступ к консоли.
Какие-нибудь идеи?
Сказано, что имя пользователя ‘admin’ заблокировано, измените имя пользователя на любое другое и перезапустите сервер Tomcat.
Ответ или решение
Ошибка 401 Unauthorized при доступе к консоли управления Tomcat
Когда вы сталкиваетесь с ошибкой 401 Unauthorized при попытке доступа к консоли управления Apache Tomcat (версии 8.0.50), скорее всего, вы имеете дело с проблемами аутентификации пользователя. В вашем случае сообщение об ошибке указывает на то, что учетная запись "admin" заблокирована.
Анализ проблемы
В логах Tomcat вы видите сообщение:
WARNING [http-apr-8080-exec-7]
org.apache.catalina.realm.LockOutRealm.filterLockedAccounts An attempt was made to authenticate the locked user "admin"
Это означает, что пользователь "admin" был заблокирован из-за слишком большого числа неудачных попыток входа в систему. Ваша настройка LockOutRealm
предназначена для предотвращения несанкционированного доступа, но в данном случае она создала проблему с доступом.
Решение проблемы
-
Изменение имени пользователя:
Чтобы обойти блокировку пользователя "admin", рекомендуется изменить имя пользователя в файлеtomcat-users.xml
. Например, вы можете использовать имяadmin_new
, как показано ниже:<tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0"> <user username="admin_new" password="!w@B@#7XTFj" roles="manager-gui,admin-gui" /> </tomcat-users>
-
Перезапуск Tomcat:
После внесения изменений в файлtomcat-users.xml
необходимо перезапустить сервер Tomcat, чтобы новые настройки вступили в силу. -
Сброс блокировки пользователя:
Если вы хотите продолжать использовать имя пользователя "admin", вам потребуется сбросить его блокировку. Это можно сделать, удалив все записи о блокировках из базы данных пользователей, однако этот процесс может быть сложнее и потребует дальнейшей настройки. -
Проверка конфигурации Realm:
Убедитесь, что в вашем файлеserver.xml
правильно настроен Realm. Вы используетеLockOutRealm
, который в свою очередь используетUserDatabaseRealm
. Убедитесь, что все ссылки на файлы настроены корректно.Пример:
<Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm>
-
Логи и отладка:
Для дальнейшей диагностики вы можете включить более подробное логгирование (как вы уже это сделали) и анализировать сообщения на уровне FINE. Это поможет понять, почему сервер не может аутентифицировать пользователя.
Заключение
Ошибка 401 Unauthorized зачастую связана с проблемами аутентификации и может быть решена изменением имени пользователя, которое блокировано, или сбросом блокировки. При правильной конфигурации Realm и безопасном управлении пользователями, доступ к консоли управления Tomcat станет возможным.
Рекомендуется следить за средствами мониторинга и регистрировать попытки доступа, что поможет предотвратить повторение подобных проблем в будущем.