資源描述:
《認(rèn)識ASP NET MVC的5種AuthorizationFilter》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、認(rèn)識ASP.NETMVC的5種AuthorizationFilter在總體介紹了篩選器及其提供機(jī)制(《深入探討ASP.NETMVC的篩選器》)之后,我們按照執(zhí)行的先后順序?qū)λ姆N不同的篩選器進(jìn)行單獨(dú)介紹,首先來介紹最先執(zhí)行的AuthorizationFilter。從命名來看,AuthorizationFilter用于完成授權(quán)相關(guān)的工作,所以它應(yīng)該在Action方法被調(diào)用之前執(zhí)行才能起到授權(quán)的作用。不僅限于授權(quán),如果我們希望目標(biāo)Action方法被調(diào)用之前中斷執(zhí)行的流程“做點(diǎn)什么”,都可以以AuthorizationFilter的形式來實(shí)現(xiàn)。[本文已經(jīng)同步到《HowASP.N
2、ETMVCWorks?》中]一、IAuthorizationFilter所有的AuthorizationFilter實(shí)現(xiàn)了接口IAuthorizationFilter。如下面的代碼片斷所示,IAuthorizationFilter定義了一個(gè)OnAuthorization方法用于實(shí)現(xiàn)授權(quán)的操作。作為該方法的參數(shù)filterContext是一個(gè)表示授權(quán)上下文的AuthorizationContext對象,而AuthorizationContext直接繼承自ControllerContext。1:publicinterfaceIAuthorizationFilter2:{3:
3、voidOnAuthorization(AuthorizationContextfilterContext);4:}5:6:publicclassAuthorizationContext:ControllerContext7:{8:publicAuthorizationContext();9:publicAuthorizationContext(ControllerContextcontrollerContext,ActionDescriptoractionDescriptor);10:11:publicvirtualActionDescriptorActionDesc
4、riptor{get;set;}12:publicActionResultResult{get;set;}13:}AuthorizationContext的ActionDescriptor屬性表示描述當(dāng)前執(zhí)行Action的ActionDescriptor對象,而Result屬性返回一個(gè)用于在授權(quán)階段呈現(xiàn)的ActionResult。AuthorizationFilter的執(zhí)行是ActionInvoker進(jìn)行Action執(zhí)行的第一項(xiàng)工作,因?yàn)楹罄m(xù)的工作(Model綁定、Model驗(yàn)證、Action方法執(zhí)行等)只有在成功授權(quán)的基礎(chǔ)上才會有意義。ActionInvoker在通過
5、執(zhí)行AuthorizationFilter之前,會先根據(jù)當(dāng)前的Controller上下文和解析出來的用于描述當(dāng)前Action的ActionDescriptor,并以此創(chuàng)建一個(gè)表示授權(quán)上下文的AuthorizationContext對象。然后將此AuthorizationContext對象作為參數(shù),按照Filter對象Order和Scope屬性決定的順序執(zhí)行所有AuthorizationFilter的OnAuthorization。在所有的AuthorizationFilter都執(zhí)行完畢之后,如果指定的AuthorizationContext對象的Result屬性表示得A
6、ctionResult不為Null,整個(gè)Action的執(zhí)行將會終止,而ActionInvoker將會直接執(zhí)行該ActionResult。一般來說,某個(gè)AuthorizationFilter在對當(dāng)前請求實(shí)施授權(quán)的時(shí)候,如果授權(quán)失敗它可以通過設(shè)置傳入的AuthorizationContext對象的Result屬性響應(yīng)一個(gè)“401,Unauthrized”回復(fù),或者呈現(xiàn)一個(gè)錯(cuò)誤頁面。二、AuthorizeAttribute如果我們要求某個(gè)Action只能被認(rèn)證的用戶訪問,可以在Controller類型或者Action方法上應(yīng)用具有如下定義的AuthorizeAttribute
7、特性。AuthorizeAttribute還可以具體限制目標(biāo)Action可被訪問的用戶或者角色,它的Users和Roles屬性用于指定被授權(quán)的用戶名和角色列表,中間用采用逗號作為分隔符。如果沒有顯式地對Users和Roles屬性進(jìn)行設(shè)置,AuthorizeAttribute在進(jìn)行授權(quán)操作的時(shí)候只要求訪問者是被認(rèn)證的用戶。1:[AttributeUsage(AttributeTargets.Method
8、AttributeTargets.Class,Inherited=true,AllowMultiple=true)]2:publiccla