2010-01-27 68 views
0

我问这个服务器上的过错,而是真的还没有多少运气,希望有人在这里将能够提供一些建议......阻止访问特定的web应用中的Tomcat6

我有一个Tomcat 6服务器上运行得很好。我有外部访问工作。我想知道如何防止某人看到特定的webapps,例如,我不想要外部访问ROOT tomcat页面。我会如何去阻止某些webapps,同时让其他webapps对外部用户可见?

这是我已经试过: 这一切都拒绝甚至127.0.0.1请求

<Host name="localhost" appBase="webapps" 
       unpackWARs="true" autoDeploy="true" 
       xmlValidation="false" xmlNamespaceAware="false"> 

    <Context path="/examples" docBase="" > 
     <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1"/> 
    </Context> 
    </Host> 

此拒绝所有为好。

<Host name="localhost" appBase="webapps" 
        unpackWARs="true" autoDeploy="true" 
        xmlValidation="false" xmlNamespaceAware="false"> 

     <Context path="/examples" docBase="" > 
      <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="*"/> 
     </Context> 
     </Host> 

基本上我试图阻止访问根默认的Tomcat页面和应用实例....

任何想法?

回答

2

不能使用通配符的允许属性......在另一方面,你可以使用一个用于否认属性。

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

这就是为什么我用上面的代码得到403。

另一种处理这种情况的方式是我创建了一个jsp,将流量重定向到我想要的任何位置。

1

查看文档。 http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html

你似乎是正确的。它说:“如果指定了这个属性,远程地址必须匹配这个请求被接受。”

你可能要看的一件事是看看127.0.0.1是否真的是真正的IP。您可能实际上正在使用该框的实际IP。尝试在本地主机之后添加该IP地址。

+0

以及我的第二个例子下面进行测试,我已经让=“* “这应该允许任何事情和一切。但它仍然否认。 – Gabe 2010-01-27 19:56:55

+0

您对双重检查源ip + 1做了一个很好的说明 – Gabe 2010-01-27 20:22:02

1

“允许”属性的值必须用反斜杠转义允许的IP地址的点来定义:

<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1"/> 
0

这可能是一个IPv6的问题。这是我tomcat6/Catalina/myApp.xml是什么样子:

<!--<?xml version="1.0" encoding="UTF-8"?> --> 
<Context path="/myApp" privileged="true"> 
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1,0:0:0:0:0:0:0:1"/> 
</Context> 

这可以通过将产生403如果你拒绝访问

wget --inet4-only http://localhost:8080/myApp