為了使這些方面無縫工作,需要將Web service安全上下文連接到Acegi安全上下文——因此定制的Axis處理程序類的名稱為AcegiBridgeAuthenticationHandler。它不僅將處理Web service安全性,還負責將從該過程獲取的安全上下文連接到Acegi環境,這樣Acegi就可以決定是否授權訪問POJO。方法是從Web service請求消息中提取安全聲明,進行驗證,然后創建認證令牌,因為我們已經為本例選擇了用戶名/密碼認證,所以為UsernamePasswordAuthenticationToken。然后將該認證令牌設置到Acegi SecurityContext中,這樣稍后在控制訪問業務邏輯POJO時,Acegi可以使用請求方的證書和權限。
下面將解釋如何使用Spring把各方面聯系起來。法寶就是圖1中名為AOP proxy的小綠色對象,由Spring生成。該對象實現了AccountMgr接口,并擔當業務邏輯POJO AccountMgrImpl的代理。這允許Spring插入Acegi的MethodSecurityInterceptor,當有人嘗試在POJO上調用方法時,會執行訪問控制檢查。當FundsTransferServiceSoapBindingImpl將Web service請求委派給POJO時,實際上是委派給AOP代理的實例,而不是直接委派給AccountMgrImpl。由于FundsTransferServiceSoapBindingImpl擴展了ServletEndpointSupport,因此它可以訪問Spring應用程序上下文,以獲得配置了正確接口、偵聽器和目標類的AOP代理的引用AccountMgrImpl。
圖2中的序列圖演示了客戶端調用FundsTransferService時,將發生的處理流程。請求消息由Axis Engine接收,然后調用AcegiBridgeAuthenticationHandler。AcegiBridgeAuthenticationHandler將驗證認證信息,然后創建UsernamePasswordAuthenticationToken。接著,將該令牌設置到Acegi的SecurityContext中,用于稍后使用。AcegiBridgeAuthenticationHandler成功返回后,Axis Engine將在FundsTransferServiceSoapBindingImpl上調用transferFunds()方法。FundsTransferServiceSoapBindingImpl將其委派給AOP代理,在初始化過程中,可以較早從Spring web應用程序上下文獲取。AOP proxy將調用Acegi MethodSecurityInterceptor,這樣就可以進行它的安全檢查。MethodSecurityInterceptor從SecurityContext獲取認證令牌,然后檢查是否已經對其進行了認證。接下來,將使用認證令牌中的信息來確定是否應該授權客戶端的訪問,在AccountMgrImpl上調用transferFunds()方法。如果允許客戶端進行訪問,那么MethodSecurityInterceptor將允許調用該方法,然后進入AccountMgrImpl。最后AccountMgrImpl處理該請求,并返回結果,最終傳送回客戶端程序。
圖2.演示服務實現處理流程的序列圖
業務邏輯實現和配置
我們的討論將從解釋業務邏輯類的實現和配置開始,因為他們是最簡單的。AccountMgr接口和AccountMgrImpl類的源代碼參見參考資料。從源代碼中可以發現,事實上實現并沒有做任何事情,所以可以保持其簡單,因為本文并不是關于如何編寫轉移資金代碼的文章。
文章來源于領測軟件測試網 http://www.kjueaiud.com/