【转】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源碼分析系列文章目錄
總結
以上是生活随笔為你收集整理的【转】ABP源码分析十九:Auditing的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技能人才歧视要改变!姚劲波:很多保姆月嫂
- 下一篇: 【转】极限编程一览