从不同主机访问Tomcat Manager应用程序

从不同主机访问Tomcat Manager应用程序,tomcat,Tomcat,我已经在远程服务器上安装了tomcat 9,启动后,它运行良好,我可以访问并查看tomcat hello页面。但当我试图打开manager应用程序查看我部署的应用程序时,我得到403拒绝访问,我已经在tomcat用户xml中添加了如下角色: <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="admin"/> <user username="user" pas

我已经在远程服务器上安装了tomcat 9,启动后,它运行良好,我可以访问并查看tomcat hello页面。但当我试图打开manager应用程序查看我部署的应用程序时,我得到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文件并访问manager应用程序?

每个部署的Web应用程序都有一个位于

$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="^YOUR.IP.ADDRESS.HERE$" />
</Context>

请注意,
Valve
元素的allow属性是一个与连接主机的IP地址匹配的正则表达式。因此,用您的IP地址替换您的.IP.address.HERE(或其他一些有用的表达式)

其他
Valve
类满足其他规则(例如,匹配主机名的
RemoteHostValve
)。Tomcat的早期版本使用阀类org.apache.catalina.valves.RemoteIpValve进行IP地址匹配


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

对于tomcat v8.5.4及更高版本,文件
/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>

之后,刷新浏览器(不需要重新启动Tomcat),您可以看到管理器页面。

以下两种配置对我有效

  • tomcat-users.xml详细信息


  • 
    
  • /webapps/manager/META-INF/context.xml的context.xml和 /webapps/host manager/META-INF/context.xml



  • 要从不同的机器访问tomcat manager,您必须遵循以下步骤:

    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"/>
    
    <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 className="org.apache.catalina.valves.RemoteAddrValve"
             allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|YOUR.IP.ADDRESS.HERE" />
    
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
             allow=".*" />
    
    
    
    这里,管理员用户正在分配角色=“管理器gui、管理器脚本、管理器jmx、管理器状态”

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

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

    <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"/>
    
    <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 className="org.apache.catalina.valves.RemoteAddrValve"
             allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|YOUR.IP.ADDRESS.HERE" />
    
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
             allow=".*" />
    
    默认配置

    <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"/>
    
    <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 className="org.apache.catalina.valves.RemoteAddrValve"
             allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|YOUR.IP.ADDRESS.HERE" />
    
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
             allow=".*" />
    
    
    
    在阀门中,仅允许本地机器IP以127启动。\d+。\d+。\d+

    2.a:允许特定IP

    <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"/>
    
    <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 className="org.apache.catalina.valves.RemoteAddrValve"
             allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|YOUR.IP.ADDRESS.HERE" />
    
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
             allow=".*" />
    
    
    
    在这里,您只需用您的IP地址替换|您的.IP.ADDRESS.Here

    2.b:允许所有IP

    <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"/>
    
    <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 className="org.apache.catalina.valves.RemoteAddrValve"
             allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|YOUR.IP.ADDRESS.HERE" />
    
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
             allow=".*" />
    
    
    
    这里使用allow=“.*”允许所有IP


    谢谢:)

    在8.5.0中工作,但需要重新启动。谢谢我不得不等待大约10-15秒,但在8.5.11中不需要重新启动。谢谢在8.5.9中工作,无需重新启动。但是,在Windows 7计算机上应用程序大约需要15秒。谢谢403拒绝访问对于Tomcat初学者来说,与此问题相关的一个重要事实是Tomcat使用多个
    context.xml
    文件。Tomcat的默认错误页面中关于编辑Manager的context.xml文件的说明可以更清楚地表述为编辑Manager应用程序目录中的context.xml文件。在不关闭和启动Tomcat的情况下加载这些配置更改应该做些什么?403访问拒绝在Tomcat 8中,您不需要做任何事情,这些配置更改立即生效。经过几次尝试后,我终于成功了。我试图在context.xml文件中进行更改,而在路径“conf/Catalina/localhost”manager.xml文件中进行更改。如果它不存在,只需要创建一个。对于tomcat 8.5.37,我还必须包括:这个答案与这个问题不匹配,请添加否决投票的具体原因。如果这个答案似乎是错误的,那么请解释。经过你的解释,我可以提高我的知识。感谢您不允许访问单个ip,您可以从网络添加对所有ip的访问,使用与de default file相同的语法:这允许从本地网络中的所有主机访问192.168.250.0/24此答案是唯一指定
    您的.IP.ADDRESS.HERE
    -的答案,因此真正回答了从不同主机访问manager应用程序的问题,而不仅仅是从internet上的任何位置。我认为这应该是公认的答案。改进建议:将2.a移到顶部,可以选择添加@ThomasLIMIN的建议。我显然不想让我的主机从世界任何地方访问,只想访问我的计算机,因此,我将对这个答案进行投票。