ABP源碼分析十九:Auditing


審計跟蹤(也叫審計日志)是與安全相關的按照時間順序的記錄,它們提供了活動序列的文檔證據,這些活動序列可以在任何時間影響一個特定的操作。

 

AuditInfo:定義如下圖中需要被Audit的信息。

 

AuditedAttribute: 用於標識一個方法或一個類的所有方法都需要啟用Auditing功能。

DisableAuditingAttribute:用於標識一個方法或一個類的所有方法都需要關閉Auditing功能。

 

IMvcControllersAuditingConfiguration/MvcControllersAuditingConfiguration : 用於配置是否啟用對MVC Controller及其Action的Auditing功能。

 

IAuditingConfiguration/AuditingConfiguration: 可以配置如下圖中的四個屬性,除了Selectors外其他三個屬性都很容易理解。

 

NamedTypeSelector:類型選擇器,這個對象的核心屬性是一個以type為輸入參數,返回bool類型的委托predicate.

 

IAuditingSelectorList/AuditingSelectorList : 這是一個NamedTypeSelector對象的集合

 

如下是AbpKernelModule在PreInitialize方法中給IAuditingConfiguration對象配置了一個類型選擇器(用於篩選出IApplicationService對象),稍后所有IApplicationService對象都會被注入Auditing 攔截器。

 

IAuditInfoProvider:這個接口定義一個方法用於完善AuditInfo對象。為什么要定義一個這樣的接口和方法呢?ABP核心模塊處於最底層,有些上層的信息在這一層無法直接取得(比如瀏覽器信息)。ABP的做法是在上層實現IAuditInfoProvider,然后將其register到底層的容器中。處於底層ABP的核心模塊則從resolve出這個對象,然后調用該對象的fill方法來完善AuditInfo。

 

NullAuditInfoProvider : 空的IAuditInfoProvider實現,這個是ABP中的缺省的IAuditInfoProvider的實現。

WebAuditInfoProvider :這個IAuditInfoProvider對象就是上面所說的上層的IAuditInfoProvider實現。這個類就是在Abp.Web模塊中實現的。(注意:整個項目中除了NullAuditInfoProvider 只能有一個自定義的IAuditInfoProvider實現。也就是說實際項目中無法直接創建自定義的IAuditInfoProvider,因為Abp.Web模塊中已經有一個了。

 

 

ABP是如何實現在方法執行時自動完成Auditing的呢(俗話叫AOP)?通過注入到IApplicationService對象的componentmodel上的AuditingInterceptor攔截器實現的。AuditingInterceptor攔截器是由AuditingInterceptorRegistrar對象的Initialize方法注入的。而AuditingInterceptorRegistrar的Initialize會在AbpKernelModule的Initialize的時候被調用。(見下面代碼截圖)

 

 

 

滿足以下四個條件的方法都會被AuditingInterceptor攔截:

1.IApplicationService的實例中的方法

2.添加了AuditedAttribute的類的實例的方法

3.加了AuditedAttribute的方法

4.通過IAuditingConfiguration對象的Selectors屬性添加需要被auditing的類型。

 

那些方法會執行的時候會被真正加入Auditing功能呢?具體可參見AuditingHelper的代碼。大概總結如下條件(同時滿足):

1.必須滿足AuditingConfiguration中的IsEnabled為true

2.如果session為空,則configuration.IsEnabledForAnonymousUsers也必須為true

3.Public 方法

 

AuditingInterceptor生成AuditInfo實例,然后調用IAuditingStore類實例執行AuditInfo持久化。

IAuditingStore:這個接口定義持久化AuditInfo的方法

SimpleLogAuditingStore:ABP底層框架自帶的IAuditingStore實現是SimpleLogAuditingStore,可以把下圖中5個信息持久化到日志中。module-zero項目中有個更為完整的實現。

 

實現Auditing功能的相關接口和對象的關系圖

 

 

返回ABP源碼分析系列文章目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM