骏马金龙 (新博客:www.junmajinlong.com)

网名骏马金龙,钟情于IT世界里的各种原理和实现机制,强迫症重症患者。爱研究、爱翻译、爱分享。特借此一亩三分田记录自己成长点滴!!!

Tomcat(四):tomcat图形管理和身份认证

Tomcat系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html


tomcat和大多数服务程序的管理不一样,tomcat更适合使用图形管理界面进行管理,例如在不停止tomcat的情况下动态部署新的webapp或重新加载webapp。如果不使用图形管理工具,tomcat虽然也可以配置自动部署(autoDeploy="true"),但我们却无法掌握它重新部署的时刻。

图形管理工具的官方手册:Manager App HOW-TO

直接在浏览器中输入tomcat所在机器的ip地址及其connector监听端口,即可进入tomcat的图形管理界面,也是欢迎界面。这个欢迎页面是tomcat engine中的默认Host组件localhost提供的页面,该资源的路径为$catalina_home/webapps/ROOT/index.jsp。

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

这3个按钮对应的是tomcat默认就安装好的3个管理工具:状态查看工具、webapp管理工具(非常重要)和虚拟主机管理工具。其中前2个工具都由名为manager的webapp提供,第三个工具由名为host-manager的webapp提供,因此后文将认为只提供了两个管理程序:manager和host-manager。它们的路径都在webapps目录下。

[root@xuexi tomcat]# ls webapps/
docs  examples  host-manager  manager  ROOT

点击这3个按钮,分别可以进入对应的管理界面。但第一次点击,会出现"403 Access denied"错误,并提示要去配置conf/tomcat-users.xml,添加相应权限的角色。

对于这两个管理程序而言,总共有以下几种预定义角色:其中后两项角色是上一图中"Host Manager"需要的角色。

  • manager-gui - allows access to the HTML GUI and the status pages
  • manager-script - allows access to the text interface and the status pages
  • manager-jmx - allows access to the JMX proxy and the status pages
  • manager-status - allows access to the status pages only
  • admin-gui - allows access to the HTML GUI
  • admin-script - allows access to the text interface

对于使用manager-gui角色的用户,强烈建议不要再为其赋予manager-script和manager-jmx角色。

这些角色名称rolename已经预定义在各管理程序内的web.xml中:

[root@xuexi tomcat]# grep 'role-name' webapps/manager/WEB-INF/web.xml
       <role-name>manager-gui</role-name>
       <role-name>manager-script</role-name>
       <role-name>manager-jmx</role-name>
       <role-name>manager-gui</role-name>
       <role-name>manager-script</role-name>
       <role-name>manager-jmx</role-name>
       <role-name>manager-status</role-name>
    <role-name>manager-gui</role-name>
    <role-name>manager-script</role-name>
    <role-name>manager-jmx</role-name>
    <role-name>manager-status</role-name>

[root@xuexi tomcat]# grep 'role-name' webapps/host-manager/WEB-INF/web.xml 
       <role-name>admin-script</role-name>
       <role-name>admin-gui</role-name>
    <role-name>admin-gui</role-name>
    <role-name>admin-script</role-name>

因此,在各管理程序的身份验证文件中可以直接引用这几个名称。那么如何配置身份验证,使得只有通过验证的用户才能使用这些管理工具?根据前面的错误页面提示,只需在$catalina_home/conf/tomcat-user.xml中配置即可。

例如,使用预定义好的角色进行配置。

<user username="malongshuai" password="123456" roles="manager-gui,admin-gui"/>

再重启tomcat即可。但是,这样的配置在tomcat 7版本能成功,在tomcat8上不会成功。查看catalina.home下的.RUNING文件,提示如下内容:

For example, the standard manager web application can be kept in
CATALINA_HOME/webapps/manager and loaded into CATALINA_BASE by using
the following trick:

 * Copy the CATALINA_HOME/webapps/manager/META-INF/context.xml
   file as CATALINA_BASE/conf/Catalina/localhost/manager.xml

 * Add docBase attribute as shown below.

The file will look like the following:

  <?xml version="1.0" encoding="UTF-8"?>
  <Context docBase="${catalina.home}/webapps/manager"
    antiResourceLocking="false" privileged="true" >
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.0\.0\.1" />
  </Context>

它要求我们将CATALINA_HOME/webapps/manager/META-INF/context.xml复制到CATALINA_BASE/conf/Catalina/localhost/manager.xml,并修改其内容。既然知道了操作过程,所以在tomcat 8中也就不用去复制了,这里直接创建文件并向里面写入内容即可,注意文件名一定不能错误。

[root@xuexi tomcat]# mkdir -p conf/Catalina/localhost
[root@xuexi tomcat]# cat conf/Catalina/localhost/manager.xml    
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="${catalina.home}/webapps/manager" 
        antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="^.*$" />
</Context>

此处allow定义的是允许所有主机访问此管理状态页面。还可以使用allow="127\.0\.0\.1"定义只有本机才能访问,allow="192\.168\.100.*"定义只有192.168.100网段的主机才能访问。

定义了manager.xml文件后,也仅能访问前两个页面,因为前两个页面是manager程序提供的,访问时需要在uri中使用/manager,或直接点击上面的按钮。以下是管理webapp的图形管理工具页面,从图中可以看出,可以轻松管理某个webapp的启动、停止、部署、重新部署、部署本地项目等。

第三个页面是管理虚拟主机的图形页面,访问时的uri部分是/host-manager。但要使用它,也需要将context.xml复制到特定路径下,并修改一点内容。如下:

[root@xuexi tomcat]# cp conf/Catalina/localhost/manager.xml conf/Catalina/localhost/host-manager.xml
[root@xuexi tomcat]# sed -i s/manager/host-manager/ conf/Catalina/localhost/host-manager.xml

下图是虚拟主机的管理页面。

以上是将文件manager.xml或host-manager.xml复制到CATALINA_BASE/conf/Catalina/localhost/下,这是管理所有虚拟主机,如果想要单独管理某虚拟主机,则可以将文件按照$CATALINA_BASE/conf/[enginename]/[hostname]路径进行复制。

posted @ 2018-02-03 16:01  骏马金龙  阅读(2600)  评论(0编辑  收藏  举报