2

我正在使用Spring MVC和Spring Security構建一個Tomcat/Java MVC Servlet應用程序,並且遇到了一些對我來說像控制器功能之間的體系結構不一致的問題和授權步驟。Spring MVC&Security - 授權過程中受保護資源的識別

在標準MVC中,顯示控制器檢查請求,建立相關業務資源的模型表示,並指定將輸出呈現給客戶端的視圖。

在我的使用案例中,被提供的「業務資源」是一個由配置文件(包含專輯標題,版權等),緩存元數據(尺寸,縮略圖,訪問要求等)和實際圖片。某些相冊是專用的,要求用戶登錄並具有特定的組成員身份。這個部分已經封裝在一個Album類中,並且負責管理實例的相關工廠。在添加安全性之前,控制器使用工廠來查找所請求的Album實例,並將其放入模型以供View使用。

然後我加入了Spring Security。由於授權發生在servlet過濾器鏈中(在調用Controller之前),並且授權需要訪問Album對象以作出訪問控制決定,所以我強制在授權階段期間定位/實例化Album。這感覺不太對,但是我看不到任何其他方式來實現我的目標而不重複功能。

問題:Web應用程序中的某些模型構建的正常模式是否被推回授權步驟,或者我錯過了一些重要的東西?順便說一句,爲了不查找/實例化模型對象兩次我打算把它放入HttpServletRequest作爲控制器使用的屬性。

回答

1

因爲我沒有答案,我將分享我自己的見解。

我根本不明白Spring的聲明式安全模型的範圍。如果您擁有一組基於登錄用戶的具有二進制可訪問性狀態(是/否)的資源,那麼Spring Security的模型是合適的。如果您需要更細緻的控制(即顯示一個頁面,但根據登錄用戶定製其內容),則必須在頁面生成時進行自己的過濾。

相關問題