首先請先至
acegi官方網站,下載acegi程式庫,在撰寫這份教學檔案之時,所使用的版本是1.0.3。
表acegi相關類別之間的依賴關係,可以藉由ioc容器來協助建立,在這邊您可以使用
spring 的ioc容器功能,您可以在下載的acegi檔案中,找到acegi-security-sample-tutorial.war,將之使用解壓縮軟體解 開,可以在web-inf\lib下,找到所需的spring程式庫,在acegi 1.0.3中的acegi-security-sample-tutorial.war所搭配的是spring 1.2.8。
要完成您第乙個acegi程式,您需要以下的程式庫:
為了在web應用程式中,使用acegi搭配spring的context資訊,來完成acegi的依賴關係配置,您要在web.xml中設定 org.springframework.web.context.contextloaderlistener,並在context引數中,指定設定檔 案位置與名稱,而acegi主要透過filter chain來達到請求的檢查、驗證、授權、登出等動作,您可以在web.xml中如下設定:
acegi filter chain proxy
org.acegisecurity.util.filtertobeanproxy
targetclass
org.acegisecurity.util.filterchainproxy
org.acegisecurity.util.filtertobeanproxy建立 org.acegisecurity.util.filterchainproxy例項,並將請求轉交給filterchainproxy來處理,接下來 就是配置acegi-config.xml的內容,在這邊先假設乙個需求情境,您想要對web應用程式中的/protected/下所有資源進行保護,如 果使用者試圖訪問/protected/下的資源,就先將其送至/acegilogin.jsp進行登入,登入成功後顯示使用者所請求的資源,使用者也可 以直接連線/acegilogin.jsp,登入成功後,預設顯示/loginsuccess.jsp,您可以在acegi-config.xml中加入 以下的設定:
/j_acegi_security_check"/>
可以看到在這邊使用了authenticationprocessingfilter來處理驗證,實際對使用者的驗證是交給驗證管理員,也就是authenticationmanager屬性中所設定的例項,可以在acegi-config.xml中加入:
驗證管理員管理驗證提供者,也就是實際提供使用者名稱、密碼、角色資訊的物件,來源可以是資料庫或設定檔案中的訊息,基於來源的不同,您可以使用 org.acegisecurity.providers.dao.daoauthenticationprovider,並指定其 userdetailsservice屬性,設定驗證訊息來源:
caterpillar=123456,role_supervisor
user1=user1pwd,role_user
user2=user2pwd,disabled,role_user
在這邊使用usermap屬性指定可以登入的使用者名稱、密碼、是否啟用、角色等資訊。
當驗證失敗會發生例外,這時需要將之送至/acegilogin.jsp,許可權不符而試圖取得資源時則將之送至/accessdenied.jsp,這可以使用org.acegisecurity.ui.exceptiontranslationfilter來達到:
接下來要定義可以訪問的資源,由於在這邊是針對url進行規範,可以使用org.acegisecurity.intercept.web.filtersecurityinterceptor:
class="org.acegisecurity.intercept.web.filtersecurityinterceptor">
convert_url_to_lowercase_before_comparison
pattern_type_apache_ant
/protected/**=role_supervisor,role_user
filtersecurityinteceprot需要參考至驗證管理員取得驗證訊息,以對使用者進行驗證,而是否授權則必須以投票的方式來決定,acegi的解決方案有幾種:
如果有乙個同意就通過
如果都同意就通過
如果都不反對就通過
例如若希望/protected/下可以被使用者(user)或管理者(supervisor)訪問,採第乙個方案的話則使用affirmativebased實作:
rolevoter對使用者群組中,有role_作為前置檔案的進投票,您也可以在設定rolevoter例項時,使用其roleprefix來改變前置文字。
在所有的filter被呼叫之前,通常會有個httpsessioncontextintegrationfilter,它會建立security context物件,後續的filter會將安全相關訊息儲存於其中,也可以取得當中的安全相關訊息:
acegi是基於filter chain來完成請求的檢查、驗證、授權等動作,所以要將以上的filter串在一起了:
所完成的acegi-config.xml完整檔案如下所示:
第乙個視窗程式
程式截圖 程式 include lresult callback wndproc hwnd,uint,wparam,lparam int winapi winmain hinstance hinstance,hinstance hprevinstance,pstr szcmdline,int icm...
第乙個popcap 程式
一 tips ddimage mmapimg ddimage 上f12,定位到ddimage.h,在vs2008 中ddimage.h tab標籤上alt o 定位到ddimage.cpp 二 vs2008 中c c code generation runtime library 設成multi t...
第乙個python 程式
有人在論壇 上問 將日誌格式化的方法,剛好學python,就拿這個練手了 09 55 54 error1 tmp error log.3 50 times mon jun 28 00 00 53 2009 09 55 54 error1 tmp error log.3 50 times 09 56 ...