从不同的主机

时间:2016-04-18 20:38:54

标签: tomcat

我已经在远程服务器上安装了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文件并获取对经理应用的访问权限?

5 个答案:

答案 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.xmlmanager.xml 文件。默认情况下,它们限制对 localhost 的访问,这正是我所看到的。 ||-( 因此,需要调整 server.xml 中的设置,或者在那里删除/评论它们,然后可以像以前一样添加其他响应中提到的文件。