2012-12-24 180 views
5

我從Web應用程序之外的文件夾提供圖像。我將圖像存儲在C:\ source \ Pictures中。我在春天的servlet上下文文件中配置此資源作爲一個靜態資源:如何在春天保護對靜態資源的訪問

<resources location="file:///C:/source/Pictures/" mapping="/img_resources/**"/> 

我使用

<img src="<spring:url value='/img_resources/guinnes_choc_cake.jpg/'/>"></img> 

它爲我工作很好顯示存儲在該文件夾中的圖片。但是,我有安全問題。我不想公開我的服務器中的一個目錄給公衆。 1

有沒有辦法在此文件夾中圍繞春季建成安全?

+1

也許你應該接受一些答案前面的問題? – micha

+0

@micha感謝提醒我:) – zfranciscus

+0

「在這個文件夾周圍建立安全性」 - 你有什麼樣的「安全性」?什麼是允許的,什麼不是? –

回答

7

如果你正在使用Spring Security的,你可以添加這樣的事情你Spring上下文文件(S):

<sec:intercept-url pattern="/img_resources/**" access="isAuthenticated()" /> 
+0

看起來很棒。但是,這是否意味着只有經過身份驗證的用戶才能查看圖像?如果是這樣,那麼我最終可能會有一個沒有圖片的網站。我仍然想讓公衆觀看這些圖像。 – zfranciscus

+2

其實isAuthenticated()是可用的表達式之一,顯然在你的情況下,你將不得不使用「permitAll」。在這裏您可以找到Spring Security支持的所有表達式:[基於表達式的訪問控制](http://static.springsource.org/spring-security/site/docs/3.0.x/reference/el-access.html)。 – izilotti

2

有什麼特別的理由來限制訪問靜態資源。

鑑於目錄結構被很好地定義和文件排序是語義(即img_resources夾將只包含圖像),則應該允許訪問這種資源,甚至完全旁路過濾器,以避免通過過濾器鏈的開銷如:

<sec:intercept-url pattern="/img_resources" filters="none" /> 

Spring Security tutorial

我們不希望有由Spring 01處理靜態資源安全的過濾器。爲了達到這個目的,你可以添加一個只適用於特定模式的附加塊。這必須在現有塊之前來 ,因爲它適用於特定模式。如果沒有提供 模式屬性,則該塊適用於任何請求。