我有一个运行在GNU / Linux 2.6.32-642.6.2.e16.x86_64上的Tomcat 8.0.9实例,当我尝试访问管理器UI时,无论我做什么,都会响应“401 Unauthorized”尝试。
我知道Tomcat正在运行,因为我得到了那个页面。
我知道这是Tomcat的特定实例,因为如果我关闭它并重新访问URL(https://host.name:port/manager/html),我会拒绝连接。
浏览器甚至没有提示我输入用户名和密码;它只是直接进入“401 Unauthorized”页面。
服务器的catalina.out
日志甚至报告它已部署了管理器webapp(转述):
*.a few seconds ago* INFO [localhost-startStop-1] o.a.c.s.H.deployDirectory Deploying web application directory /path/to/webapps/manager
*milliseconds later* INFO [localhost-startStop-1] o.a.c.s.H.deployDirectory Deployment of web application directory /path/to/webapps/manager has finished in 22 ms
我开始使用Apache文档(https://host.name:port/docs/manager-howto.html),然后在SO上使用此问题的多个版本进行故障排除,including one似乎有最多的答案。 由于我以前从未使用过经理,我的理论是“显而易见”正是我所缺少的;但是,我尝试了以下所有明显的东西:
我在这个过程中多次重启Tomcat,验证重新加载的URL确实触发了服务器停止拒绝的连接,然后在服务器启动时返回401错误。
我将admin-gui
添加到用户的角色中:
<role rolename="admin-gui" />
<role rolename="manager-gui" />
<user username="tomcat" password="s3cret" roles="admin-gui,manager-gui" />
上面的XML在注释块中不 - 如果我在Gvim中编辑它并启用语法高亮显示,这是非常明显的。
tomcat-users.xml
归tomcat
所有,并且可读(实际上是模式775
)。我知道它正在被阅读,因为如果我向它添加无意义的元素,catalina.out
会在启动时报告这一点。
我还将其他角色添加到tomcat-users.xml
,以防万一(manager-jmx
,admin-script
等)。 (我仍然不确定如果你把它们遗漏掉,错误拼写它们会发生什么应该发生,等等。我想经理webapp不会识别其特定集合之外的角色名称,但我自然无法证实这一点。)
server.xml
元素中Engine
内存在以下元素:
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
</Realm>
如果它是相关的,那么在server.xml
:
<GlobalNamingResources>
<Resource auth="Container" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" />
</GlobalNamingResources>
在Tomcat启动脚本中,CATALINA_HOME指向Tomcat的确切安装路径。没有TOMCAT_HOME或JAVA_HOME,但JRE_HOME指向一个指向实际Java安装的符号链接(我跟着该链接并确认)。
在manager
网络应用META-INF/context.xml
中,Valve
元素已被注释掉。
是否有关于我未经授权的原因的报告,这给了我更多信息?我已经尝试搜索经理webapp目录,希望还有另一个日志。 (没有。)