2013-12-15 84 views
0

從網絡應用程序中,很容易將編程邏輯放在瀏覽視圖上,但是如何阻止用戶直接進入jsp頁面?如何保護對webapp目錄/文件夾的訪問?

@RequestMapping("/SomeView") 
public void goToSomeView{ 

if(logicIsNotSatisfied) 
    return new ModelAndView("failure"): 
else 
    return new ModelAndView("welcome"); 
} 

很容易的

但如何讓用戶從輸入到網頁瀏覽器的直接路徑資源 例如:

http://mydomain/myWebApp/resouces/stuff.png 

問題:

我們如何限制用戶能夠直接訪問webapp的目錄?

回答

4

將JSP放在WEB-INF下,它們將不能從外部訪問。請注意,直接訪問它們不應該是一個大問題,因爲所有用戶都會得到錯誤或空白頁面,因爲視圖訪問的所有數據都不可用,因爲控制器尚未調用。

關於靜態資源,如果您不希望用戶能夠在沒有訪問控制的情況下訪問它們,那麼也將它們放在WEB-INF下或webapp目錄之外,並通過控制器訪問它們,用戶可以訪問它們,讀取它們,並將它們寫入響應。

+0

夠簡單。謝謝 – stackoverflow

2

我想提供一些建議。不要將JSP視爲用戶訪問的頁面。 JSP不是一個靜態的HTML頁面。 JSP是動態呈現HTML的一種方式。

如果你做了什麼JB Nizet建議你將永遠不會有擔心JSP渲染什麼,除非它通過應用程序的入口點去了。由於您控制了這些入口點,即。 servlet,過濾器,控制器等,您可以決定如何呈現響應。

正確編程您的URL映射。試圖訪問

http://mydomain/myWebApp/resouces/stuff.png 

用戶不必以獲取靜態圖像資源stuff.png如果他們通過適當的過濾器去。你可以很好地阻止訪問。

+0

感謝您花時間解釋這一點。我注意到斯普林斯的方法;使用Spring-Security。但我認爲有一種使用應用服務器本身的策略。回到'JB Nizet'的建議,如果你把所有東西都放在WEB-INF目錄下,那麼你就有從視圖本身查找資源的問題(例如:< - 這永遠找不到)如果這些資源總是直接訪問?或者應該僅限於當用戶具有正確的授權/認證以使用那些資源到達該頁面時? – stackoverflow

+1

@stack JB Nizet說的是你不能執行'',因爲這會告訴瀏覽器客戶端在'yourhost.com/WEB/images/stuff.png'和'WEB/images/stuff .png'不是可訪問的URL(除非將其映射到某個Servlet或Controller)。在Spring中,您可以註冊一個靜態資源處理程序,並將所需的規則放在適當的位置。通常這些資源將是'css','js'或圖像文件,因此認證並不適用。 –

相關問題