2009-12-03 67 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的某些部分也會「泄漏」。