当前位置: 首页 > 知识库问答 >
问题:

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

傅翰池
2023-03-14

我已经在远程服务器上安装了tomcat 9,启动后,它运行良好,我可以访问http://host_name:port_num并查看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运行在同一台机器上的浏览器访问主机管理器。如果要修改此限制,则需要编辑主机管理器的上下文。xml文件。

我应该如何改变上下文。xml文件并访问manager应用程序?

共有3个答案

华峰
2023-03-14

要从不同的机器访问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"/>

此处admin user正在分配角色=“manager gui、manager脚本、manager jmx、manager状态”。

这里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.\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" />

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

2.b:允许所有IP:

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

这里使用allow=“.*”可以允许所有IP。

谢谢:)

夹谷星纬
2023-03-14

每个部署的webapp都有一个上下文。生活在中的xml文件

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

(conf/Catalina/localhost by default)

并且与webapp(manager.xml)同名。如果不存在文件,则使用默认值。

因此,您需要创建一个文件conf/Catalina/localhost/manager。xml,并指定要允许远程访问的规则。例如,管理器的以下内容。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元素的允许属性是一个与连接主机的IP地址匹配的正则表达式。因此,将您的IP地址替换为YOUR. IP. ADDRESS. INE(或其他一些有用的表达式)。

其他Valve类迎合其他规则(例如RemteHostValve用于匹配主机名)。早期版本的Tomcat使用阀类org.apache.catalina.valves.RemteIpValve进行IP地址匹配。

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

孟品
2023-03-14

对于Tomcat v8.5.4及更高版本,文件

<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),您可以看到管理器页面。

 类似资料:
  • 我有以下内容: 视窗 10 操作系统 -- 主机 Oracle 虚拟盒 -- 来宾计算机 A linux Server (ubuntu) Minikube on Ubuntu for Kubernetes 我编写了一个简单的nodejs应用程序,它应该在虚拟盒子内的端口8087上运行。nodeapp通过kubernetes服务公开,然后我使用“kubectl port-就绪”将请求转发到kuber

  • 我尝试使用IP地址192.168.56.1从我的应用程序连接到主机,但没有成功。我签入了,并且有一个Virtualbox与上述IP连接。有人能帮忙修一下吗?

  • 2017-05-20 15:23:31+0200:env:{“rack.version”=>[1,3],“rack.errors”=>#>,“rack.multithread”=>true,“rack.multiprocess”=>false,“rack.run_once”=>false,“script_name”=>>“query_string”=>>“http/1.1”,“server_sof

  • 我想使用这里描述的端口转发连接到运行在OpenShift (3.9)中的PostgreSQL (9.6)集群。为此,我在一个跳转主机(在OpenShift集群之外)上设置并检查端口转发,如下所示: 因此,端口转发似乎只监听< code>localhost,而不监听主机的其他IP地址。最终,我想从另一个远程主机通过跳转主机连接到数据库,所以“本地主机”是不够的。 我如何设置(OpenShift)端口

  • 我在本地机器上的vbox上托管的ubuntu服务器上安装了openshift源(单节点集群),我需要使用其来自我的主机(客户端)的IP通过Web访问它,但它总是将我的IP重定向到本地主机172.0.0.1,如何克服这个问题?

  • 我有一个docker应用程序,我使用以下docker compose。yml运行它: 我有一个没有docker化的服务器在我的机器上运行,我可以通过访问它。我希望我的服务能够访问它。 我发现有人建议在我的服务配置中添加以下内容: 但是当我添加这个时,并尝试,我得到。当我尝试<code>curl时,也会出现同样的错误http://host.docker.internal:3000。 我拼命地尝试将端