摘要:本文分析了Acegi安全框架,詳細說明了Acegi安全框架的工作過程。舉例說明了Acegi安全框架的具體應用,討論了如何利用Acegi進行Web資源的認證和授權。使用一種基于數(shù)據(jù)庫的策略來對Acegi資源配置進行動態(tài)擴展,滿足電子商務系統(tǒng)中用戶在運行期間的動態(tài)改變權限的需求。
關鍵詞:認證;授權;安全框架;電子商務
中圖分類號:TP393.08 文獻標識碼:A 文章編號:1005-6432(2008)41-0028-02
電子商務是一種全新的企業(yè)經營模式,由于其網絡傳輸信息的特殊性,所以安全問題顯得十分重要。在電子商務系統(tǒng)中,由于業(yè)務需求面臨著不斷的變化,安全邏輯應該與應用業(yè)務邏輯代碼相分離,采用Acegi安全框架只要在配置文件中定義即可,真正做到了安全邏輯與業(yè)務邏輯的分離,很好地滿足了電子商務應用程序安全的需求。
一、Acegi安全框架
Acegi是一個基于Spring Framework的安全框架。 Acegi安全系統(tǒng)由過濾器、管理器、提供者和處理程序四種主要類型的組件組成。過濾器提供了常見的安全服務,如身份驗證、會話處理以及注銷。管理器管理是由不同提供者提供的較低級的安全服務。提供者可用于和不同類型的數(shù)據(jù)存儲服務通信,Acegi的管理器將在運行時選擇合適的提供者。有時任務可能會被分解為多個步驟,每個步驟由一個特定的處理程序執(zhí)行,可以使用自己選擇的處理程序來執(zhí)行保護應用程序所需的步驟。
Acegi安全系統(tǒng)的安全攔截器包含三個管理類: Authentication Manager(認證管理器)用于管理Authentication Provider(認證提供者)來對用戶進行認證。認證管理器依次調用認證提供者的認證方法,直到認證通過。Access Decision Manager(訪問決策管理器)用于授權一個特定的操作,先通過Authentication Manager判斷用戶是否通過認證,再根據(jù)Object Definition Source的配置信息調用Access Decision Manager,根據(jù)Role Voter的“投票”評估決定用戶是否有權訪問某資源。此外還借助于安全攔截器實現(xiàn)了對受保護資源的授限訪問。Run as Manager當執(zhí)行特定的操作時,用于選擇性地替換Authentication對象。
二、Acegi的工作流程
當客戶機向應用程序發(fā)送HTTP請求時,其工作流程如圖1所示。
(1)客戶機向應用程序發(fā)送HTTP請求。
(2)容器接收到HTTP請求創(chuàng)建一個請求對象和一個響應對象,然后調用Acegi的過濾器鏈代理。當容器調用代理時,它將向代理發(fā)送請求、響應以及過濾器鏈對象。
(3)代理過濾器調用過濾器鏈中第一個過濾器,向其發(fā)送請求、響應和過濾器鏈對象。
(4)鏈中的過濾器逐個執(zhí)行其處理。一個過濾器可以通過調用過濾器鏈中下一個過濾器隨時終止自身處理。
(5)當身份驗證過濾器完成其處理時,這些過濾器將把請求和響應對象發(fā)送到應用程序中配置的攔截過濾?器。
(6)攔截器決定是否對發(fā)出請求的客戶機進行授權,使它訪問所請求的資源。
(7)如果授權檢查通過,攔截器將控制權傳輸給應用程序,否則拒絕。
(8)應用程序改寫響應對象的內容。
(9)響應對象已經準備好了,容器將響應對象轉換為HTTP響應發(fā)送到發(fā)出請求的客戶機。
三、Acegi具體應用
了解了Acegi的工作流程后,在電子商務系統(tǒng)中的應用重點是過濾器和攔截器的配置。Authentication ProcessingFilter 配置如下:
?。糱ean id="authenticationProcessing Filter"class
="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
?。紁roperty name="authenticationManager">
<ref local="authenticationManager"/>
?。?property>
?。紁roperty name="filterProcessesUrl" value="/j_acegi_security_check"/>
?。紁roperty name="defaultTargetUrl'value="/index.jsp"/>
<property name="authenticationFailureUrl"value="/login.jsp?login_error=1"/></bean>
安全攔截器收到客戶端請求后,決定是否對其進行授權。由于在運行期間用戶可能會提出動態(tài)改變權限分配的需求,使用基于數(shù)據(jù)庫的策略讀出相關的安全配置參數(shù)。首先實現(xiàn)一個Property Editor(例如Customer Editor Configure)來覆蓋默認的實現(xiàn)。自定義一個資源定義接口包含核心方法(Get Filter Invocation Definition Source),提供資源和角色的配置,用數(shù)據(jù)庫中的數(shù)據(jù)重新組裝Filter Invocation Definition Source。將Filter Invocation Definition Source Cache中的Filter Invocation Definition Source傳遞給Filter Invocation Interceptor。
配置如下:
?。糱ean id="filterlnvocationInterceptor"class="net.sf.acegisecurity.intercept.web. FilterSecuritylnterceptor">
?。紁roperty name="authenticationManager">
?。紃ef local="authenticationManager"/>
?。?property>
?。紁roperty name="accessDecisionManager"> <ref local="accessDecisionManager"/>
</property>
?。紁roperty name="objectDefinifionSource">
?。紃ef local="FilterInvocationDefinitionSourceCache"/>
?。?property></bean>
?。糱ean id="customEditorConfigurer"class="org.springframework.beans.factory. config.CustomEditorConfigurer">
?。紁roperty name="customEditors">
?。糾ap><entry key="org.acegisecurity.intercept.web.FilterlnvocationDefintionSource">
<bean id="filterInvocationDefinitionSourceDaoExtentionEditor" Class="com.skyon.um.se- curity.acegi. intercept.web.FilterlnvocationDefinitionSourceDynamicExtentionEditor"></bean></entry></map></property></bean>
與認證授權相關的數(shù)據(jù)庫設計如圖2所示。
四、結束語
Acegi安全框架真正實現(xiàn)了安全代碼從業(yè)務代碼中的分離,系統(tǒng)結構更合理。在電子商務系統(tǒng)中,通過使用數(shù)據(jù)庫策略對Acegi資源配置動態(tài)擴展完成認證與授權,很好地解決了電子商務系統(tǒng)中應用程序的安全性需求。
作者單位:華東交通大學
參考文獻:
路鵬,殷兆麟.基于Spring的Acegi安全框架認證與授權的分析及擴展[J].計算機工程