从其他主机访问Tomcat Manager App


95

我已经在远程服务器上安装了tomcat 9,启动它后,它正常运行了,我可以访问http:// host_name:port_num并查看tomcat问候页面。但是,当我尝试打开管理器应用程序以查看已部署的应用程序时,我拒绝了403访问,我已经在tomcat用户xml中添加了角色,如下所示:

<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<user username="user" password="password" roles="admin,manager,manager-gui"/>

我看到的错误消息是:

默认情况下,只能从与Tomcat在同一台计算机上运行的浏览器访问主机管理器。如果要修改此限制,则需要编辑主机管理器的context.xml文件。

我应该如何更改context.xml文件并获得对经理应用程序的访问权限?

Answers:


143

每个已部署的Web应用程序都有一个context.xml文件,该文件位于

$CATALINA_BASE/conf/[enginename]/[hostname]

(conf/Catalina/localhost by default)

并具有与webapp相同的名称(manager.xml在这种情况下)。如果没有文件,则使用默认值。

因此,您需要创建一个文件conf/Catalina/localhost/manager.xml并指定要允许远程访问的规则。例如,以下内容manager.xml将允许从所有计算机进行访问:

<Context privileged="true" antiResourceLocking="false" 
         docBase="${catalina.home}/webapps/manager">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>

请注意,Valve元素的allow属性是与连接主机的IP地址匹配的正则表达式。其他Valve类满足其他规则(例如RemoteHostValve,匹配主机名)。

完成上述更改后,访问管理器URL时,将向您显示一个身份验证对话框。如果输入您提供的详细信息,则tomcat-users.xml应该可以访问Manager。


如何在不关闭和启动tomcat的情况下加载这些配置更改?
Kuldeep Yadav'3

403拒绝访问
Damir Olejar'7

3
在tomcat 8中,您无需执行任何操作,这些配置更改将立即生效。
Ayushya

3
经过几次尝试,终于为我工作了。我试图在context.xml文件中进行更改,而要在路径“ conf / Catalina / localhost” manager.xml文件中进行更改。如果不存在,则只需创建一个即可。
jellboi

为Tomcat条款8.5.37,我还必须包括:<阀门的className = “org.apache.catalina.valves.RemoteIpValve”/>
马里兰州

152

对于Tomcat v8.5.4及更高版本,该文件<tomcat>/webapps/manager/META-INF/context.xml已调整:

<Context antiResourceLocking="false" privileged="true" >
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>

更改此文件以注释Valve

<Context antiResourceLocking="false" privileged="true" >
    <!--
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
    -->
</Context>

之后,刷新浏览器(无需重新启动Tomcat),即可看到管理器页面。


在8.5.0中可用,但需要重新启动。谢谢!
JRichardsz

1
我不得不等待大约10-15秒,但在8.5.11中不需要重新启动。谢谢!
Karl Henselin'3

1
在8.5.9中工作,无需重新启动。但是,大约需要15秒才能在Windows 7计算机上应用。谢谢!
cbmeeks

403拒绝访问
Damir Olejar '17

1
对于Tomcat初学者来说,与这个问题有关的一个重要事实是Tomcat使用了多个context.xml文件。 Tomcat的默认错误页面中有关编辑Manager的context.xml文件的说明可以更清楚地表示为在Manager应用程序目录中编辑context.xml文件。
CODE-READ

11

要从其他计算机访问tomcat管理器,您必须执行以下步骤:

1.使用用户和一些角色更新conf / tomcat-users.xml文件

<role rolename="manager-gui"/>
 <role rolename="manager-script"/>
 <role rolename="manager-jmx"/>
 <role rolename="manager-status"/>
 <user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>

在这里,管理员用户正在分配role =“ manager-gui,manager-script,manager-jmx,manager-status”

这里的tomcat用户名和密码是:admin

2.更新webapps / manager / META-INF / context.xml文件(允许IP地址)

默认配置

<Context antiResourceLocking="false" privileged="true" >
  
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

在Valve中,此处仅允许本地机器IP以127. \ d +。\ d +。\ d +开头。

2.a:允许特定IP

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|YOUR.IP.ADDRESS.HERE" />

在这里,您只需将| YOUR.IP.ADDRESS.HERE替换为您的IP地址

2.b:允许所有IP

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow=".*" />

在这里使用allow =“。*”允许所有IP。

谢谢 :)


请添加拒绝的特定原因。如果这个答案看错了,请解释。经过您的解释,我可以提高我的知识。感谢
Ms. Sajedul Karim

您可以使用与默认文件相同的语法,而不是允许访问单个IP,而可以从网络添加对所有IP的访问:<Valve className =“ org.apache.catalina.valves.RemoteAddrValve” allow =“ 127 \。 \ d + \。\ d + \。\ d + | :: 1 | 0:0:0:0:0:0:0:1 | 192 \ .168 \ .250 \。\ d +“ />允许所有人访问本地网络192.168.250.0/24中的主机
Thomas LIMIN

2
这个答案是唯一一个指定YOUR.IP.ADDRESS.HERE-从而真正答案,从访问管理器应用程序的问题,一个不同的主机,不只是从互联网上的任何地方。恕我直言,这应该是公认的答案。改进建议:将2.a移动到顶部,可以选择添加@ThomasLIMIN的建议。
Olaf Kock

3
Following two configuration is working for me.

1 .tomcat-users.xml details
--------------------------------
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="manager-status"/>
  <role rolename="admin-gui"/>
  <role rolename="admin-script"/>
  <role rolename="tomcat"/>


  <user  username="tomcat"  password="tomcat" roles="tomcat"/>

  <user  username="admin"  password="admin" roles="admin-gui"/>

  <user  username="adminscript"  password="adminscrip" roles="admin-script"/>

  <user  username="tomcat"  password="s3cret" roles="manager-gui"/>
  <user  username="status"  password="status" roles="manager-status"/>

  <user  username="both"    password="both"   roles="manager-gui,manager-status"/>

  <user  username="script"  password="script" roles="manager-script"/>
  <user  username="jmx"     password="jmx"    roles="manager-jmx"/>

2. context.xml  of <tomcat>/webapps/manager/META-INF/context.xml and 
<tomcat>/webapps/host-manager/META-INF/context.xml
------------------------------------------------------------------------
<Context antiResourceLocking="false" privileged="true" >

  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow=".*" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>

这个答案与这个问题不匹配
袁文涛
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.