在Java Web開發中Javabean安全涉及到兩個不同的概念認證和授權前者是關於確認用戶是否確實是他們所宣稱的身份授權則是關於確認用戶是否有允許執行一個特定的操作JSF (JavaServer Faces) 是JEE 開發平台的組成部分作為表示層的技術越來越受到Java開發人員的親睐在開發過程中JSP通過DI 技術很方便的和使用類似技術的 Spring 進行整合JSF在與Acegi安全系統結合之後讓JavaBean的安全性得到很大提高
Acegi是一個用於Spring的安全框架與JSF結合提供了安全和認證安全服務框架Acegi安全系統一個很重要的特點就是它並沒有角色和用戶組的概念Acegi安全系統目前支持兩類安全管理對象第一類是為了使Spring管理的Bean可以作為MethodInvocation來使用Bean可以通過ProxyFactoryBean和BeanNameAutoProxyCreator來管理就像在Spring的事務管理一樣使用第二類是FilterInvocation它用過濾器(Filter)來創建並簡單地包裝了HTTP的ServletRequestServletResponse和FilterChainFilterInvocation可以用來保護HTTP資源通常開發人員並不需要了解它的工作機制因為他們只需要將Filter加入webxmlAcegi安全系統就可以工作了
本文用一個簡單的Web應用實例的Apache myfaces jsf的執行情況向大家展示如何使用Spring的application context整合acegi的認證和授權的功能達到JSF的應用讀者可以理解到Acegi如何落實URL級別的角色授權以及如何實施Acegi的業務層的安全說明
示例應用程序是一個用戶登錄購買的頁面用戶登錄窗口輸入正確的用戶名和密碼重定向到一個網頁在新的網頁中用戶可能發生購買行為等我們將使用Acegi安全框架的配置安全的細節確保用戶的ID已經驗證並且他的存在對購買頁的授權用戶可以訪問購買頁如果有作用role_urlaccess 就確保了用戶作出的購買行為是一個安全的商業行為JSF與Acegi安全授權驗證中牽涉到AcegiJSFSpring 三個框架大致的流程如圖介紹
第一步用戶訪問JSF網頁
第二步Acegi檢查訪問用戶是否被授權訪問該頁面
第三步如果授權驗證是有效的就將控制權交給一個為JSF服務的界面servlet
第四步在准備的過程中JSF將會找到Catalog bean
第五步JSF檢查界面結構文件(Faces configuration file)來尋找已經定義好的Catalog並且實例化Catalog bean的publicData以及privateData 屬性參數會被寫入到沒有被具體化的publicCatalogprivateCatalog beans
第六步JSF利用Spring的 DelegatingVariableResolver 可變解析器解釋 publicCatalog和 privateCatalog bean
第七步JSF利用Acegi 生成獲得publicCatalog 和 privateCatalog beans方法讀取公共數據和私有數據
第八步Acegi再次執行它的認證進程來訪問bean
第九步當Acegi獲得用戶成功地訪問了bean信息後系統將產生一個獲取方法來讀取公共和私有的數據並且將數據傳送給JSF
第十步JSF調用目錄bean的設置方法將公共和私有數據寫入Catalog bean
第十一步JSF執行其周期完成並順利傳送頁面JSF
這樣一個用戶從輸入用戶到進入系統進行購買操作的流程就完成在這個過程中Acegi與JSF一起完成了用戶的認證授權工作相對於JSP用戶訪問授權的過程JSF的生命周期要比JSP復雜得多JSP的生命周期非常簡單頁面被執行時HTML標記立即被生成了生命周期隨即結束而一個完整的JSFAcegi請求處理生命周期被精心規劃為個階段但JSF框架會管理這一切所以程序員在獲得更多控制能力的同時工作量並沒有增加同時也讓系統安全性能得到較大的提高總的來說案例相對簡單但是JSFAcegi安全處理是非常到位的借助本文筆者希望大家對JSF以及Acegi給與更多關注
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26614.html