999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

NET平臺利用AspectSharp實現(xiàn)權(quán)限驗證

2006-12-31 00:00:00靳小強唐寧九胡雪亮
計算機應(yīng)用研究 2006年8期

(四川大學(xué) 計算機學(xué)院, 四川 成都 610065)

摘 要: 通過對AOP和OOP的簡單分析提出了AOP的發(fā)展前景;介紹DynamicProxy的基本原理和攔截機制以及.NET平臺下AOP實現(xiàn)技術(shù)的研究;最后在此基礎(chǔ)上提出利用AspectSharp實現(xiàn)權(quán)限驗證的思路。

關(guān)鍵詞: 面向方面的編程; Aspect; DynamicProxy

中圖法分類號: TP309 文獻標識碼: A

文章編號: 1001 3695(2006)08 0152 03

.NET Platform Jurisdiction Confirmation Implementation by Aspect

Sharp

JIN Xiao qiang, TANG Ning jiu, HU Xue liang

(College of Computer Science, Sichuan University, Chengdu Sichuan 610065, China)

Abstract: Through analyzing AOP and OOP,then presents the AOP development prospects.This paper introduces the basic principle and intercept mechanism of DynamicProxy and researches the .Net platform implementatation technology of AOP.In this foundation give thought of implementatation jurisdiction confirmation by AspectSharp.

Key words: Aspect Oriented Programming(AOP); Aspect; DynamicProxy

面向方面的編程(Aspect Oriented Programming,AOP)是面向?qū)ο缶幊蹋∣bject Oriented Programming,OOP)的延續(xù),是一種新的編程技術(shù),它彌補了OOP在跨越模塊行為上的不足。因為傳統(tǒng)的程序表現(xiàn)出來的是不能自然地適合單個程序模塊或者幾個緊密相關(guān)的程序模塊的行為,比如日志記錄、性能優(yōu)化以及設(shè)計模式等,我們將這種行為稱為橫切關(guān)注點(Cross Cutting Concern),它跨越了給定編程模型中的典型職責(zé)界限。通過引進Aspect,將影響多個類的行為封裝到一個可重用模塊中,允許程序員對橫切關(guān)注點進行模塊化,用一種松散耦合的方式來實現(xiàn)獨立的關(guān)注點,然后經(jīng)過組合建立最終系統(tǒng),從而消除了OOP引起的代碼混亂和分散問題,增強了系統(tǒng)的可維護性和代碼的重用性。AOP也是GOF設(shè)計模式的延續(xù),設(shè)計模式孜孜不倦追求的是調(diào)用者和被調(diào)用者之間的解耦,所以AOP可以說也是這種目標的一種實現(xiàn)。

1.NET平臺AOP實現(xiàn)技術(shù)研究

目前,在.NET平臺上的AOP實現(xiàn)遠不如Java平臺上的成熟,功能也比較弱,使用上也不是很方便。

1.1實現(xiàn)AOP的方法

實現(xiàn)AOP的關(guān)鍵是攔截正常的方法調(diào)用,將我們需要額外附加的功能(不同方面的代碼)透明地“織入”到這些方法中,以完成一些額外的要求。從總體方法上來說,織入的方法有兩大類:靜態(tài)織入和動態(tài)織入。

1.1.1靜態(tài)織入方法

一般都是需要擴展編譯器的功能,將需要織入的代碼通過修改IL代碼直接添加到相應(yīng)的被織入點;或需要為原來語言添加新的語法結(jié)構(gòu),從語法上支持AOP(AspectJ就是采用的這種方式)。使用這種方式來實現(xiàn)AOP,其優(yōu)點是代碼執(zhí)行的效率高,缺點是實現(xiàn)者需要對.NET Framework有很深的了解才能夠做到對IL的修改。由于織入方法是靜態(tài)的,當需要添加新的織入方法時,往往需要重新編譯,或者運行IL增強器重新執(zhí)行靜態(tài)織入的方法。在.NET平臺上,我們也可以使用Emit提供的強大功能來實現(xiàn)這一點。但是,IL增強器帶來了很大的非透明性,程序員很難直觀地調(diào)試增強后的字節(jié)碼。

1.1.2動態(tài)織入方法

在Java平臺上,可以使用Proxy模式或定制ClassLoader來實現(xiàn)AOP功能。

在.NET平臺上,要實現(xiàn)AOP的動態(tài)織入,歸納起來可以采用以下幾種方法:

(1)使用ContextAttribute和ContextBoundObject來對對象的方法進行攔截。

(2)使用Emit,在運行時動態(tài)構(gòu)建被織入代碼后的類,當程序調(diào)用被織入類時,實際上調(diào)用的是被修改后的類(Loom使用的就是這種方式)。

(3)使用Proxy模式。

在ASP.NET中使用HTTPHandler和HTTPModule來自定義對ASP.NET頁面的訪問加入一些我們需要的處理。

2AspectSharp的工作原理

AspectSharp是一個基于.NET的AOP開源項目,它兼容于AOP Alliance規(guī)范(基于AOP和Java平臺上的一個開源項目,它致力于推動AOP在軟件工程中的應(yīng)用實施和標準化工作,以增強現(xiàn)有的中間件平臺(如J2EE),及開發(fā)環(huán)境(如JBuilder等)在這方面存在的缺陷。目前AOP Alliance已成為面向方面編程的參照標準),基于DynamicProxy和自定義格式的配置文件來為工程項目配置和加載。

AspectSharp充分發(fā)揚了AOP關(guān)于分散關(guān)注、代碼重用、功能拆分的思想。其主要特點表現(xiàn)在:

(1)易用;

(2)自定義配置語言;

(3)通過混入類實現(xiàn)行為的多態(tài);

(4)聯(lián)合切入點與攔截器。

AspectSharp的工作原理如圖1所示。

3DynamicProxy基本原理

通過實際對象(如TestImpl)得到它繼承的接口(ITest)的函數(shù)信息,動態(tài)生成一個新的代理類(可以理解為動態(tài)生成一個繼承自ITest的新類ITestProxy),新的代理類Hook成了被代理類所有的函數(shù)調(diào)用方法,使其所有的函數(shù)調(diào)用最后轉(zhuǎn)到代理類(ITestProxy)的Invoke方法,這樣我們就可以在代理類(ITestProxy)的Invoke中進行類似AOP處理的操作。

我們以用戶權(quán)限檢查為例來看一下DynamicProxy的攔截機制:

//業(yè)務(wù)類接口

Public interface ITest

{

TestFunctionOne( )

}

//業(yè)務(wù)類

Public class ITestImpl

{

Public void TestFunctionone( )

{

}

} 

其函數(shù)調(diào)用流程如下:

得到動態(tài)生成的ITestProxy的一個實例

ITest test=(ITest)SecurityProxy.NewInstance(new TestImpl());

執(zhí)行業(yè)務(wù)類的方法,實際調(diào)用的是SecurityProxy類中的Invoke函數(shù)test.TestFunctionOne();

Invoke函數(shù)會實際調(diào)用ITestImpl的TestFunctionOne()方法,而在調(diào)用此方法以前使用IsMethodInRole(userRole, method.Name)進行用戶權(quán)限的檢查。 

DynamicProxy的主要特點:

(1)通過DynamicProxy可以很方便地實現(xiàn)類似AOP的機制;

(2)由于它是通過得到實際對象的Interface(接口)信息來進行函數(shù)調(diào)用Hook的,所有我們要使用的類都得從Interface繼承;

(3)不能很方便地自定義哪些函數(shù)要Hook,哪些不要。

4實現(xiàn)權(quán)限驗證

在軟件開發(fā)的過程中,常常需要對某些操作進行權(quán)限的驗證工作,即當用戶執(zhí)行某種操作時系統(tǒng)需要對其身份進行驗證,以確認他是否有權(quán)限進行相關(guān)的操作。一種解決方案是:基于每一種需要驗證權(quán)限的操作進行權(quán)限定義,在權(quán)限的基礎(chǔ)上再定義角色。當某個用戶進行某項操作時,系統(tǒng)會根據(jù)用戶當前的角色來判斷該用戶是否被允許執(zhí)行該操作。而驗證用戶身份的代碼常常與實際用戶想要執(zhí)行的代碼混在一起。下面我們應(yīng)用AspectSharp來完成用戶權(quán)限驗證的工作,以實現(xiàn)關(guān)注點的分離。思路如下:

(1)首先定義一個常規(guī)業(yè)務(wù)處理類的接口

Public interface IBusinessOperation

{

void Run( );

} 

(2)實現(xiàn)常規(guī)業(yè)務(wù)處理類

Public class BusinessOperation

{

Public void Run( )

{

Console.WriteLine("My BusinessOperation is running")

}

} 

(3)身份驗證類,利用該類作為攔截器攔截身份驗證

Public interface ISecurity

{

void Validate( );

}

Public ProductSecurityAttribute:Attribute, IBizSecurity 

{

ProductAccess access;

Public ProductSecurityAttribute(ProductAccess access)

{

this.access=access;

}

Public void Validate( )

{

// 驗證用戶是否有權(quán)限操作

}

}

Public class SecurityInterceptor:IMethodInterceptor,ISecurity

{

Public SecurityInterceptor( )

{

}

#region IMethodInterceptor Members

Public object Invoke(IMethod Invocation invocation)

{

bool isPassed=Validate (IMethod Invocation invocation);

if isPassed= =true 

{

return invocation.Proceed( );

}

else

{…}

}

#endregion

Public bool Validate (IMethodInvocation invocation)

{

/*在此驗證用戶是否有權(quán)限操作,從數(shù)據(jù)庫中取得用戶的角色及權(quán)限列表,如果允許該用戶 進行操作則返回True,否則返回False*/

}

} 

(4)Aspect配置

<a spectsharp>

<advices>

<interceptors> 

<interceptor name="Security"

type="MyStudy.SecurityInterceptor, MyStudy"/>

</interceptors>

</advices>

<aspects defaultNamespace="MyStudy">

<aspect typeName="BusinessOperation">

<pointcut method="Run" interceptor="Security"/>

</aspect>

</aspects>

</aspectsharp> 

在業(yè)務(wù)對象BusinessOperation的Run方法上定義截入點, 由SecurityInterceptor進行載入處理。

5結(jié)束語

基于DynamicProxy的實現(xiàn)是設(shè)計模式的發(fā)展,思路也較為精巧(DynamicProxy,AspectSharp都是采用這種思想,但方式又有所不同),通過.NET提供的Reflection.emit等強大工具構(gòu)造一個類似透明代理的封裝,可以解決簡潔性和效率方面的一些問題,但實現(xiàn)方式欠自然。創(chuàng)建對象的時候并不是直接New一個對象,而是需要對其包裝,返回一個類似于透明代理的對象,讓人感覺到Hook的存在,并且對于構(gòu)造函數(shù)的攔截需特殊處理,再就是只能攔截接口方法及虛方法,并且同樣存在對歷史構(gòu)件或第三方構(gòu)件難以復(fù)用的問題。

本文是以近年來興起的一種新的編程思想——Aspect Oriented Programming(AOP,面向方面的編程)為指導(dǎo)思想,結(jié)合Java平臺上AOP的多種實現(xiàn)模式及幾個基于.NET的AOP 開源項目,對.NET平臺上的AOP編程實現(xiàn)作一點探討。雖然現(xiàn)在人們對于AOP的研究還處于相當不完善的階段,它也只能應(yīng)用于很少的幾種語言環(huán)境下,特別是.NET平臺上AOP的實現(xiàn)微軟尚未作出明確的支持,但AOP的出現(xiàn)將會使應(yīng)用程序的開發(fā)更加快速、更靈活,且較少出現(xiàn)缺陷卻是一個不爭的事實。AOP將最終改變整個軟件開發(fā)的方式,它很可能會是編程方法學(xué)發(fā)展的一個里程碑,并且更完美地實現(xiàn)“用例驅(qū)動”的開發(fā)思想。

參考文獻:

[1]Erich Camma, Richard Helm, Ralph Johnson,et al.Design Patterns: Elements of Reusable Object Oriented Software[M].Addison Wesley,2003.

[2] Andrei Popovici,Thomas Gross,Gustavo Alonso.Dynamic Weaving for Aspect Oriented Programming[M].ACM Press,2002.

[3] Alexandre Vasseur.Dynamic AOP and Runtime Weaving for Java:How Does Aspect Werkz Address It in Dynamic AOP[C].Workshop of AOSD,2004.

[4] Ramnivas Laddad.I Want My AOP![J].Java World,2002.

[5] Jonas Boner.AspectWe rkz Dynamic AOP for Java[EB/OL].http://aspect werkz.Codehaus.org/papers_talks.html.

[6] hBifTs.通過面向方面編程提高代碼的封裝和復(fù)用性[EB/OL].http://www.cnblogs.com/hbifts/articles/7512.html,2004 04 15.

[7] SteeveLee.DotNETAOP[EB/OL].http://www.gotdotnet.com/ Workspaces/Workspace. aspx?id=1b78f7c1-895f-49a7-8fa6-1565db-16d41b. 

作者簡介:靳小強(1981 ),男,碩士研究生,主要研究方向為軟件工程;唐寧九(1960 ),男,教授,碩士生導(dǎo)師,主要研究方向為軟件工程、計算機網(wǎng)絡(luò);胡雪亮(1982 ),男,碩士研究生,研究方向為軟件工程。

注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。

主站蜘蛛池模板: 久久精品国产精品国产一区| 国产在线观看第二页| 国产制服丝袜91在线| 少妇露出福利视频| 在线播放国产99re| 精品在线免费播放| 国内精品手机在线观看视频| 黄色福利在线| 欧美精品高清| 真实国产乱子伦视频| 毛片网站在线播放| 日韩精品成人在线| 亚洲精品福利视频| 日韩毛片免费| 亚洲妓女综合网995久久| 2020国产精品视频| 亚洲无码日韩一区| 欧美日韩一区二区三| 青青草一区| 亚洲第一区欧美国产综合| 午夜日韩久久影院| 永久天堂网Av| 人人爽人人爽人人片| 人人澡人人爽欧美一区| 国产在线精彩视频论坛| a毛片在线| 亚洲成人免费在线| 日本一区二区三区精品AⅤ| 99热在线只有精品| 国产精品香蕉在线观看不卡| 国产一区二区网站| 91福利免费| 日本成人一区| 91成人免费观看在线观看| 在线观看无码av五月花| 国产96在线 | 亚洲黄色激情网站| 日韩成人免费网站| 亚洲香蕉在线| 欧美精品成人| 毛片卡一卡二| 欧美一区二区三区香蕉视| 成人毛片在线播放| 日韩第八页| 全午夜免费一级毛片| 国产国拍精品视频免费看| 久久香蕉欧美精品| 午夜丁香婷婷| 亚洲国产午夜精华无码福利| 国产区人妖精品人妖精品视频| 狠狠ⅴ日韩v欧美v天堂| 国产偷国产偷在线高清| 国产精品女熟高潮视频| 久久99久久无码毛片一区二区| 久久精品丝袜| 国产拍在线| 国产成人无码AV在线播放动漫 | 国产精品女主播| 午夜福利视频一区| 58av国产精品| 日韩AV手机在线观看蜜芽| 国产久操视频| 综合五月天网| 免费啪啪网址| 国产h视频在线观看视频| 亚洲第一网站男人都懂| 国产精品刺激对白在线| 午夜精品影院| 伦精品一区二区三区视频| 性视频久久| 老司机精品一区在线视频| 在线播放真实国产乱子伦| 91麻豆精品国产高清在线| 任我操在线视频| 无码不卡的中文字幕视频| 国产欧美日韩精品第二区| 114级毛片免费观看| 国产黄色片在线看| 久久夜色精品| 亚洲一级毛片免费观看| 久久久受www免费人成| 欧美伊人色综合久久天天|