2016-08-16 87 views
3

我將在我的Javascript前端+ Spring MVC項目(用戶管理管理Web應用程序)中使用Spring安全性我試圖弄清楚是否有任何安全方面的好處將這些前端html代碼特別放在jsp文件與我的後端代碼在同一臺服務器上,所以我可以利用某些jsp標記。或者我可以完美地使它成爲一個Ajax應用程序,服務於不同服務器的前端。仍然完全使用彈簧安全?沒有jsp的Spring安全性

回答

3

在這裏,我假設:

  • 一個javascript前端
  • 主要服務JSON

上的安全角度來看,一個Spring MVC的支架應用,春季安全只能保護揹你應該記住,前端安全(在瀏覽器視圖中隱藏鏈接或命令)只是一種幻想,因爲用戶總是可以僞造一個請求,甚至是一個Ajax請求。

從用戶體驗的角度來看,很明顯,你永遠不應該向用戶展示可能性,並且當他使用它時,告訴他他是不被允許的。所以你的前端必須知道授予用戶什麼特權。 Spring安全帶有一些JSP頁面中可用的服務器端標籤,但對於Javascript前端,您可以(應該)實現一個特殊的URL服務器端,它返回當前用戶的能力,只要用戶在這裏發送請求驗證並將結果緩存在客戶端會話中(Windows.sessionStorage)。這樣你的JavaScript代碼就知道應該向特定用戶顯示什麼。

+0

有沒有辦法讓當前用戶可用的URL? – Sumit

3

您可以使用spring security來確保在您的控制器中提供AJAX JSON調用級別的請求URL,這就是我的建議。

無論您在JS前端如何顯示/隱藏功能,數據等,重要的是確保提供功能和數據的JSON調用。這樣,即使最終用戶試圖破解您的前端(他們可能會因爲這很容易),但請確保它們由於缺乏訪問而在執行REST調用時失敗。

關於「你能」使用這個安全與使用JSP標籤的問題有點關係嗎?絕對 - 確保您在通話級別的所有安全性按上述方式正確處理,並且您將被設置。您應該像獨立的應用程序一樣構建您的REST/JSON服務,這可以用於任何類型的前端。

2

你可以使用Spring Security來保護你的服務器端,這意味着你的問題的簡短之處是:「我可以完美地使它成爲ajax應用程序[..]嗎?」是。

對於Ajax應用程序,我的建議是讓服務器端成爲一個RESTful API,所以我會認爲是這樣。

有兩個元素有助於「安全」:認證和授權。

認證意味着客戶端提供了一些憑據(例如密鑰,OAuth令牌,用戶/密碼組合),這使您確信他或她確實是他們自稱的用戶(即用戶ID 12345)。該認證將作爲會話的一部分由您的應用程序保留。由於Http是無狀態的,因此對服務器的每個後續請求都需要發送所述會話的標識,以便服務器可以查找它。你可以找到here所有你需要知道的有關Spring Security認證的知識。不知道你的用戶如何計劃認證,我不能更具體。

授權更直接:用戶標識12345可能無法訪問所有內容。他可能有權訪問/widgets/gidgets,但不能訪問/widgets/fidgets。要做到這一點,最簡單的方法是通過@PreAuthorize註釋。瞭解更多關於它here。一個例子是這樣的:

@RestController 
@RequestMapping("/widgets") 
public class WidgetController{ 
    @RequestMapping("/gidgets") 
    @PreAuthorize("hasRole('GIDGET_MANAGER')") 
    List<Gidget> getGidgets(){ 
     return gidgetService.getGidgets(); 
    } 

    @RequestMapping("/fidgets") 
    @PreAuthorize("hasRole('FIDGET_MANAGER')") 
    List<Fidget> getFidgets(){ 
     return fidgetService.getFidgets(); 
    } 
} 

這個做什麼,在幕後,就是它攔截請求,基於路徑上,它驗證如果當前被驗證用戶名爲您指定的角色,允許該方法在肯定情況下執行。否則,它會完全跳過方法執行並向客戶端返回401 UNAUTHORIZED響應。