2016-01-24 123 views
1

我有一個用於靜態內容的Apache Web服務器和一些帶有一些servlet的Tomcat服務器。防止Tomcat提供靜態資源

Apache服務於WAR中包含的靜態資源,但是從已部署的WAR目錄複製了的外部目錄,而不是從已部署的WAR目錄本身。

當Apache接收到一個後端請求時,它把它路由到Tomcat:

ProxyPass /backend ajp://localhost:8009/backend 
ProxyPassReverse /backend ajp://localhost:8009/backend 

我的問題是Tomcat的也服務於靜態資源,因此,例如,這兩個請求是服務於同一網頁:

http://foo.com/page.html 
http://foo.com/backend/page.html 

如何防止Tomcat提供靜態資源?

我可以從部署的戰爭目錄中刪除靜態內容,但我正在尋找更好的方法。

+0

將靜態內容移動到WAR中不公開可見的文件夾中。 –

+0

你的意思是進入WEB-INF,對吧? – IsidroGH

+1

是的,這可能會解決你的問題。您仍然可以從WAR中複製,但現在內容不會公開訪問。 –

回答

1

您可以嘗試將靜態資源移動到WEB-INF文件夾內的某個位置。從Oracle servlet specification

WEB-INF目錄不是應用程序的公共文檔樹的一部分。容器不能將包含在WEB-INF目錄中的文件直接提供給客戶端。但是,使用ServletContext上的getResource和getResourceAsStream()方法調用,或者使用RequestDispatcher包含/轉發,WEB-INF目錄的內容對servlet代碼可見。

您的腳本仍然可以從您的WAR複製資源,這只是文件的存檔。但是這些文件不能直接從您的WAR中訪問。