剑客
关注科技互联网

为什么你 Tomcat 的 Manager 登录不成功?

也许,Tomcat用户都遇到过这个问题:

想使用Manager应用管理应用,查看服务器状态,但是却在登录框前困住了手脚。按照页面上的提示,增加了 tomcat-users.xml 中的配置,用户、角色配置了一大堆,却还是不成功。

群里有许多人问到过关于上面提到的这个问题。所以这次把它写下来,便于帮助以后遇到类似问题的人。

下面我们来看Manager的登录问题。

配置

我们前面的文章《 你可能真的不了解的Basic认证 》以及《 Tomcat单点登录配置及源码分析 》提到过Web应用中的验证方式,其中提到过Manager的验证使用的是 BASIC 方式,是在web.xml中进行配置的,方式类似于下面的内容,其中也声明了需要的角色,和保护的资源等。

为什么你 Tomcat 的 Manager 登录不成功?

在访问manager应用时,如果我们在弹出输入用户名和密码的框时,选择了取消,会定向到401的页面。 如果认真的看上面的提示信息,其实完全可以解决问题。

此时页面上的信息类似下面的样子:

为什么你 Tomcat 的 Manager 登录不成功?

Tomcat很贴心的把重要的信息都给框了起来。而我们一般情况下,在本地测试的时候,只需要按照第二个红框中的内容,增加tomcat-users.xml就OK了。甚至只需要把框中的内容粘贴到对应文件中即可。

之所以在这个文件中增加,是因为Tomcat的Resource,在server.xml中配置时,使用的就是这个文件中指定的内容:

为什么你 Tomcat 的 Manager 登录不成功?

在tomcat-users.xml中增加的下面这些内容,

为什么你 Tomcat 的 Manager 登录不成功?

实质上是在启动时Digester根据配置,创建了对应的 Role User 。这里需要提醒一点的是, 这里user中的roles内指定的内容,可以不需要在上面先声明,例如上面图中的manager-gui这个role可以不单独声明,代码中解析的时候,会自动创建。 代码比较简单,就不贴了。

理论上这个时候就可以用了。 但是

如果你的Tomcat是部署在远程的机器上,而你在本地访问远程的manager应用,那么问题来了!

是否有同学还记得我前面写过的这篇文章:《 如何避免Manager应用被人利用

Tomcat为了安全起见,对于manager这种应用, 增加了只允许本地访问的限制 。所以,平时你在本地测试的时候没有遇到问题,但是远程部署时出问题了。

解决方式,前面文章里如果避免被远程访问的配置就是这个,401页面里提示也写的比较明白。在manager应用的 META-INF 中的context.xml中,有这样的配置:

为什么你 Tomcat 的 Manager 登录不成功?

去掉之后,就OK了。当然,最好是测试环境,生产环境还是限制一下比较好。

相关阅读

Tomcat单点登录配置及源码分析

如何避免Manager应用被人利用

Tomcat的Valve介绍

扫描或长按下方二维码,即可关注,发现更多精彩文章!

为什么你 Tomcat 的 Manager 登录不成功?

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址