也许,Tomcat用户都遇到过这个问题:
想使用Manager应用管理应用,查看服务器状态,但是却在登录框前困住了手脚。按照页面上的提示,增加了 tomcat-users.xml 中的配置,用户、角色配置了一大堆,却还是不成功。
群里有许多人问到过关于上面提到的这个问题。所以这次把它写下来,便于帮助以后遇到类似问题的人。
下面我们来看Manager的登录问题。
配置
我们前面的文章《你可能真的不了解的Basic认证》以及《Tomcat单点登录配置及源码分析》提到过Web应用中的验证方式,其中提到过Manager的验证使用的是BASIC方式,是在web.xml中进行配置的,方式类似于下面的内容,其中也声明了需要的角色,和保护的资源等。
在访问manager应用时,如果我们在弹出输入用户名和密码的框时,选择了取消,会定向到401的页面。如果认真的看上面的提示信息,其实完全可以解决问题。
此时页面上的信息类似下面的样子:
Tomcat很贴心的把重要的信息都给框了起来。而我们一般情况下,在本地测试的时候,只需要按照第二个红框中的内容,增加tomcat-users.xml就OK了。甚至只需要把框中的内容粘贴到对应文件中即可。
之所以在这个文件中增加,是因为Tomcat的Resource,在server.xml中配置时,使用的就是这个文件中指定的内容:
在tomcat-users.xml中增加的下面这些内容,
实质上是在启动时Digester根据配置,创建了对应的Role和User。这里需要提醒一点的是,这里user中的roles内指定的内容,可以不需要在上面先声明,例如上面图中的manager-gui这个role可以不单独声明,代码中解析的时候,会自动创建。代码比较简单,就不贴了。
理论上这个时候就可以用了。但是:
如果你的Tomcat是部署在远程的机器上,而你在本地访问远程的manager应用,那么问题来了!
是否有同学还记得我前面写过的这篇文章:《如何避免Manager应用被人利用》
Tomcat为了安全起见,对于manager这种应用,增加了只允许本地访问的限制。所以,平时你在本地测试的时候没有遇到问题,但是远程部署时出问题了。
解决方式,前面文章里如果避免被远程访问的配置就是这个,401页面里提示也写的比较明白。在manager应用的META-INF中的context.xml中,有这样的配置:
去掉之后,就OK了。当然,最好是测试环境,生产环境还是限制一下比较好。
相关阅读
扫描或长按下方二维码,即可关注,发现更多精彩文章!