我已经在远程服务器上安装了tomcat 9,启动它后,它很好,我可以访问http://host_name:port_num并查看tomcat hello页面。但是当我尝试打开管理器应用程序以查看我已部署的应用程序时,我拒绝访问403,我已经在tomcat用户xml中添加了角色,如下所示:
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<user username="user" password="password" roles="admin,manager,manager-gui"/>
我看到的错误消息是:
默认情况下,只能从与Tomcat在同一台计算机上运行的浏览器访问Host Manager。如果您希望修改此限制,则需要编辑Host Manager的context.xml文件。
我应该如何更改context.xml文件并获取对经理应用的访问权限?
答案 0 :(得分:131)
对于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),可以看到管理器页面。
答案 1 :(得分:118)
每个部署的webapp都有一个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
中提供的详细信息,则应该可以访问管理器。
答案 2 :(得分:4)
要从其他计算机访问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"/>
这里管理员用户正在分配 roles =“ manager-gui,manager-script,manager-jmx,manager-status” 。
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中,它仅允许以 127. \ d +。\ d +。\ d + 开头的本地机器IP。
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。
谢谢:)
答案 3 :(得分:1)
export default function Routes(props) {
console.log('Routes');
return (
<Router>
<App/>
</Router>
)
}
export class App extends React.Component {
render() {
console.log("App render");
return (
<div>
<h1> Welcome to React </h1>
<Header/>
<Switch>
<Route path="/" exact component={Home} />
</Switch>
</div>
)
}
}
答案 4 :(得分:0)
因为我不得不艰难地学习默认的 \etc\tomcat\server.xml
文件(至少对于 OpenSUSE v15.2 上的 v9.0.36)已经包含了管理器和主机的 <Context ...>
和 <Valve ...>
定义- 经理应用程序!这些显然会否决您可能在其他地方定义的任何 context.xml
或 manager.xml
文件。默认情况下,它们限制对 localhost 的访问,这正是我所看到的。 ||-( 因此,需要调整 server.xml
中的设置,或者在那里删除/评论它们,然后可以像以前一样添加其他响应中提到的文件。