2009-12-03 79 views
7

我被困在某种配置问题,我认为。我需要保护 一个文件夹,它位于我的实际tomcat应用程序中,从某个IP范围访问 。Tomcat阀门设置

我以为这是serverfault,所以我发布了问题there。 现在我不知道这是否是SO或SF反正...

不过我一直在试图歌厅它自己去想通这 我需要设置

org.apache.catalina.valves.RemoteAddrValve 

为我的文件夹。可悲的是,我无法获得我需要做的那个设置 。 web.xml,server.xml?试过两个,都没有成功。任何人都可以请 帮我解决这个问题。

TIA

ķ

+0

我添加了一个有关过滤器部分,我的答案。我认为这是你需要的。 – 2009-12-03 13:33:49

回答

7

应该去你的<Context>元素中server.xml中:

<Context 
    path="/tcadmin" 
    docBase="${catalina.home}/server/webapps/admin" 
    privileged="true" 
> 
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" 
     allow="127\.0\.0\.1" 
    /> 
</Context> 

记住,该字符串值是正则表达式的模式,所以正则表达式的特殊字符(例如点(。))必须用反斜杠进行转义。

编辑:回复OP的评论。 我认为您需要在您的Web应用中实施FILTER,并将其配置为接受或拒绝基于其远程地址IP的请求。远程地址可以从ServletRequest检索到的对象传入doFilter方法。

你在你的web.xml文件中声明过滤器:

<filter> 
    <filter-name>GatekeeperFilter</filter-name> 
    <filter-class>your.package.GatekeeperFilter</filter-class> 
    <init-param> 
    <param-name>allowedNetwork</param-name> 
    <param-value>192\.168\.2\.*</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>GatekeeperFilter</filter-name> 
    <url-pattern>/path/to/protected/folder</url-pattern> 
</filter-mapping> 

了解什么需要做的,接受初始化参数链接的文章。我认为,为了您的决定,您可以无耻地从RequestDumperValve复制代码。

+0

快速回答的第一个thx,(+1)。可悲的是,这似乎还没有奏效。到目前为止,我的server.xml中没有上下文部分。其实应用程序本身应该是世界可访问的。只有一个文件夹在那里,基本上包含一些pdf的文件夹应该只能被某些IP访问。在应用程序中有一个简单的href链接到该文件夹​​。如果客户来自我的内部网络,一切都很好。如果客户端是外部的,那么文件夹不应该为他打开。我的方法还是对的? – KB22 2009-12-03 12:52:56

4

您需要将其放入定义相关Web应用程序的<Context>元素中。

对于Tomcat也可以是几个地方,web应用程序特定的每个下(与Web应用控制)/META-INF/context.xml或服务器特定的(和服务器控制)/conf/[enginename]/[hostname]/context.xml或特定服务器的全球/conf/context.xml或主机专用/conf/server.xml 。另请参阅Tomcat Context documentation

2

Tomcat Valve可应用于整个引擎,主机或特定上下文(webapp)。你必须为整个应用程序使用它,而不是特定的路径或目录。

你应该在你的META-INF/context.xml或conf/Catalina/[host]目录中的上下文片段中设置它。例如,

<Context path="/myapp" ...> 
    ... 
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" 
     allow="10.1.2.*"/> 
</Context> 
+1

有帮助。我可以通过这样做将我的网站限制在适当的IPv4块中。但是,它似乎不适用于IPv6。有没有不同的方式来做到这一点,还是Tomcat仍然没有完整的IPv6支持? – 2010-03-23 15:05:59

+0

@BrianKnoblauch,tomcat *不支持IPv6,请参见[阻止访问某些webapps-in-tomcat6](http://stackoverflow.com/questions/2149719/prevent-access-to-certain-webapps- in-tomcat6) – 2012-05-02 15:23:57

+0

看起来它需要一个定制的Tomcat来支持IPv6(预先构建的二进制文件似乎不支持它)。到目前为止,无法找到正确的依赖关系/选项组合来完成使用IPv6工作的Tomcat的完整版本。所以,是的,它支持它,但实际上祝你好运。 ;-) – 2012-05-02 15:42:14

3

有同样的需求,因为你(但由于其他原因)上周并创建了一个阀门,阻断通路请求。它基于org.apache.catalina.valves.RequestFilterValve

用法:

<Valve className="se.qbranch.tomcat.valve.BlockAccessByPathValve" path="/manager/.*" allow="127\.0\.0\.1"/>

该阀可在引擎,主机或背景信息,就像任何阀一起使用,并提供在GitHub。 http://github.com/xlson/tomcat-valves

如果能解决您的问题,我会建议在您的应用程序中使用默认的tomcat阀门或servlet过滤器。我们需要定制阀门的原因是,即使我们在应用程序的<Context>元素中使用了RemoteAddrValve,tomcat管理应用程序Psi-Probe的某些部分也会“泄漏”。