大概是这学期开学没多久吧,4月份的时候,为了学习javaEE,装了Tomcat。过了这么久早就忘记用户名和密码了,所以无法进入Tomcat的管理界面。百度(其实我也很想用google)了一堆,几乎都是修改用户配置文件,可能是版本的差异,对于我这个版本都没有太大用处。其实只要按照tomcat的提示一步步去做就可以解决,前提是英语基础要好,其实技术文章比文学作品和四级考试好懂多了,语言很直白,从来不拐弯抹角。
下面是解决这个问题的步骤:
一、找到Tomcat配置文件的位置,修改tomcat-users.xml
我的配置文件在D:\Program Files\Apache Software Foundation\Tomcat 8.0\conf。在这个目录下存放了所有有关Tomcat的配置文件,包括 content.xml,server.xml,web.xml,tomcat-users.xml,每个配置文件都有自己的作用,我们需要修改的是跟用户相关的tomcat-users.xml。
打开tomcat-users.xml配置文件(我省略了部分注释):
1 <?xml version='1.0' encoding='cp936'?>
2 <tomcat-users xmlns="http://tomcat.apache.org/xml"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
5 version="1.0">
6 <!--
7 NOTE: By default, no user is included in the "manager-gui" role required
8 to operate the "/manager/html" web application. If you wish to use this app,
9 you must define such a user - the username and password are arbitrary.
10 -->
11 <!--
12 NOTE: The sample user and role entries below are wrapped in a comment
13 and thus are ignored when reading this file. Do not forget to remove
14 <!.. ..> that surrounds them.
15 -->
16 <role rolename="tomcat"/>
17 <role rolename="role1"/>
18 <user username="tomcat" password="tomcat" roles="tomcat"/>
19 <user username="both" password="tomcat" roles="tomcat,role1"/>
20 <user username="role1" password="tomcat" roles="role1"/>
21 </tomcat-users>
配置文件里7-11行的注释说的很清楚:默认情况下没有用户包括在可以操作"/manager/html"页面的"manager-gui"的角色中,如果你想开启这种应用,你可以定义一个这样的用户,用户名和密码随意。于是我添加了几行代码,修改后的配置文件是这样的:
1 <?xml version='1.0' encoding='cp936'?> 2 <tomcat-users xmlns="http://tomcat.apache.org/xml" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" 5 version="1.0"> 6 <!-- 7 NOTE: By default, no user is included in the "manager-gui" role required 8 to operate the "/manager/html" web application. If you wish to use this app, 9 you must define such a user - the username and password are arbitrary. 10 --> 11 <!-- 12 NOTE: The sample user and role entries below are wrapped in a comment 13 and thus are ignored when reading this file. Do not forget to remove 14 <!.. ..> that surrounds them. 15 --> 16 <role rolename="tomcat"/> 17 <role rolename="role1"/> 18 <user username="tomcat" password="tomcat" roles="tomcat"/> 19 <user username="both" password="tomcat" roles="tomcat,role1"/> 20 <user username="role1" password="tomcat" roles="role1"/>
21 <role rolename="manager-gui"/> 22 <user username="admin" password="admin" roles="admin-gui"/> 23 </tomcat-users>
添加了 <role rolename="manager-gui"/> <user username="admin" password="admin" roles="manager-gui"/> 这两行代码后就添加了一个角色manager-gui,并且添加了一个用户,用户名是admin,密码是admin,角色是manager-gui,记得修改完后要Ctrl+S保存一下。
二、重启Tomcat
命令行怎么重启我还不太清楚,以后转移到linux平台的时候更多的肯定还是用命令行,姑且先用图形化工具吧。不过它好像没提供restart选项,我只好先stop service,再start。重新启动的时候,tomcat会重新读取xml配置文件,这时刚才具有管理员权限的用户就被添加进去了。在浏览器输入192.168.1.106:8080,浏览器会访问默认页面
在这个页面的右辺有3个按钮,我们刚才的配置只会对第1个和第2个按钮起作用,点击这两个button,输入用户名和密码就可以访问/manage/html 和/manage/status页面了
三、遇到的新问题
然而如果点击第1个或者第3个按钮,就会出现下面的情况:
在这个报错页面里已经给出了详细的解决方案,如果英文水平还可以并且愿意静下心来看一看,就知道怎么解决这个问题了。刚才我们添加了一个manager-gui的角色,并且添加了一个具有这种角色相应权限的用户。这次我们只需要再添加一个admin-gui角色,并添加这样一个属于这种角色的用户就可以了。我在原来的配置文件里又添加了39,40两行代码:
修改后保存,这次,重启Tomcat,就可以访问原来403禁止访问的/host-manager/html页面了
四、最终的解决之道
然而,顾此失彼, 虽然/host-manager/html页面可以访问了,但是原来的两个页面却被403forbidden了,我思考了一会儿,觉得问题还是出在配置文件上。在刚才的方法中,我添加了两个名字相同的用户admin(暂且不论他们的密码是否相同),分别赋予他们不同的角色,但是tomcat在处理这个信息的时候会覆盖这个前一条配置信息,tomcat会以为你想修改这个用户的角色,把他从manager-gui改为admin-gui。如果我当时在创建角色为admin-gui的用户是名字不和manager-gui角色的用户名相同,比如取名admin2,这样在登录/host-manager/html页面时用admin2的用户名登录,并输入相应的密码就不会403forbidden了。但是要记两个用户名和密码很麻烦,怎么办呢?
从配置文件前面的部分 <user username="tomcat" password="tomcat" roles="tomcat"/><user username="both" password="tomcat" roles="tomcat,role1"/>可以看出,这样就给一个用户同时赋予两种角色了。于是我将配置文件修改成了这样:<role rolename="admin-gui"/> <user username="admin" password="admin" roles="admin-gui,manager-gui"/> 保存后重启tomcat,这次终于奏效了。
五、感悟
遇到问题的时候,文档或者配置文件本身就是最好的资料,要善于模仿文档的书写方式试着去猜测并理解每个参数的含义,同时一定要具备一定的英语阅读理解能力。