日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】ABP源码分析十九:Auditing

發布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。