acegi security實踐教程—資源角色資訊存到放資料庫
阿新 • • 發佈:2018-11-01
回顧:
前幾篇部落格中,我們都是在acegi配置檔案中配置那些web資源需要保護,這次為了更接近企業開發,我們把web資源角色資訊都存放到資料庫中。 那既然自己設計表,那麼就需要自己重新定義 objectDefinitionSource了,那先看看我們原來acegi的配置: 那預設的呼叫PathBasedFilterInvocationDefinitionMap類, 主要的方法如下:前提說明:
在最近幾篇部落格中,都有debug步驟,其中debug步驟,是因為除錯中為了看原始碼必經之路,為了更讓同學們瞭解其呼叫步驟,所以才加入debug步驟。在部落格中不可能把所有的原始碼貼出,所以只能截關鍵程式碼。因為有時自定義類,想知道何時何地以及如何調到自己實現類。 有時為了明白框架為何丟擲異常以及為何轉到這種頁面,這個時候都需要一遍遍又一遍遍又又……的debug,哈哈,大家肯定都有這種經歷吧具體開發步驟:
開發環境:
MyEclispe10.7.1+tomcat6.0.37+acegi1.0.5+spring2.0專案目錄如下:
其中readme主要用來記錄本次驗證目的講解:
根據上述預設的PathBasedFilterInvocationDefinitionMap類,我們主要重寫其方法即可,只要把其角色資訊封裝成ConfigAttributeDefinition物件返回即可。debug執行:
當職責連執行到FilterSecurityInterceptor類的doFilter時:第一步:進入FilterSecurityInterceptor類的DoFilter方法中
第二步:進入invoke方法
第三步:進入beforeInvocation方法,此方法主要獲取其web資源對應的角色資訊
第四步:通過抽象類查詢url對應的角色,然後呼叫自定義類查詢url對應的角色資訊
若訪問的url有相應的許可權,則返回其角色;否則則返回null。若返回後,我們看看後面是如何繼續執行的?
若資料庫中沒有其url對應的角色資訊,則程式職責連繼續執行,因為FilterSecurityInterceptor是最後一個Filter,因為執行完後,則正常顯示其頁面