审计跟踪(也叫审计日志)是与安全相关的按照时间顺序的记录,它们提供了活动序列的文档证据,这些活动序列可以在任何时间影响一个特定的操作。

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的更多相关文章

  1. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  2. ABP源码分析十:Unit Of Work

    ABP以AOP的方式实现UnitOfWork功能.通过UnitOfWorkRegistrar将UnitOfWorkInterceptor在某个类被注册到IOCContainner的时候,一并添加到该类 ...

  3. ABP源码分析十二:本地化

    本文逐个分析ABP中涉及到locaization的接口和类,以及相互之间的关系.本地化主要涉及两个方面:一个是语言(Language)的管理,这部分相对简单.另一个是语言对应得本地化资源(Locali ...

  4. ABP源码分析十四:Entity的设计

    IEntity<TPrimaryKey>: 封装了PrimaryKey:Id,这是一个泛型类型 IEntity: 封装了PrimaryKey:Id,这是一个int类型 Entity< ...

  5. ABP源码分析十五:ABP中的实用扩展方法

    类名 扩展的类型 方法名 参数 作用 XmlNodeExtensions XmlNode GetAttributeValueOrNull attributeName Gets an   attribu ...

  6. ABP源码分析十六:DTO的设计

    IDTO:空接口,用于标注Dto对象. ComboboxItemDto:用于combobox/list中Item的DTO NameValueDto<T>/NameValueDto:用于na ...

  7. ABP源码分析十八:UI Inputs

    以下图中描述的接口和类都在Abp项目的Runtime/Validation, UI/Inputs目录下的.在当前版本的ABP(0.83)中这些接口和类并没有实际使用到.阅读代码时可以忽略,无需浪费时间 ...

  8. [Abp 源码分析]十二、多租户体系与权限验证

    0.简介 承接上篇文章我们会在这篇文章详细解说一下 Abp 是如何结合 IPermissionChecker 与 IFeatureChecker 来实现一个完整的多租户系统的权限校验的. 1.多租户的 ...

  9. jQuery 源码分析(十九) DOM遍历模块详解

    jQuery的DOM遍历模块对DOM模型的原生属性parentNode.childNodes.firstChild.lastChild.previousSibling.nextSibling进行了封装 ...

随机推荐

  1. Database Replay和Consolidated Database replay

    简介 在数据库的迁移和升级场景中,我们经常会遇到一个问题:在做压力测试时,如何模拟真实的业务压力,解决这个问题的方法有很多,比如:应用方开发模拟程序或者使用压力测试工具模拟,如load runner, ...

  2. [C#] 软硬结合第二篇——酷我音乐盒的逆天玩法

    1.灵感来源: LZ是纯宅男,一天从早上8:00起一直要呆在电脑旁到晚上12:00左右吧~平时也没人来闲聊几句,刷空间暑假也没啥动态,听音乐吧...~有些确实不好听,于是就不得不打断手头的工作去点击下 ...

  3. Angular企业级开发-AngularJS1.x学习路径

    博客目录 有链接的表明已经完成了,其他的正在建设中. 1.AngularJS简介 2.搭建Angular开发环境 3.Angular MVC实现 4.[Angular项目目录结构] 5.[SPA介绍] ...

  4. javascript表单的Ajax 提交插件的使用

    Ajax 提交插件 form.js 表单的下载地址:官方网站:http://malsup.com/jquery/form/ form.js 插件有两个核心方法:ajaxForm()和ajaxSubmi ...

  5. Asp.net Core准备工作

    1.安装环境 安装.Net Core SDK 安装VS2015 Update3 安装DotNetCore.1.0.1-VS2015Tools.Preview2.0.2.exe 2.新建Core工程 项 ...

  6. TemplateMethod(模块方法模式)

    /** * 模块模式 * @author TMAC-J * 将一个完整的算法分离,分成不同的模块 * 用于有很多步骤的时候,可能以后这些步骤还会增加,把这些步骤分离 * 将有共性的部分放在抽象类中 * ...

  7. Android 开发一定要看的15个实战项目

    前言: 虽说网上有太多的Android课程,但是大多都是视频,有Android在线开发环境的几乎没有,但是对于学习Android的人来说拥有在线的Android开发环境是非常好的,可以随时动手操作学习 ...

  8. Linux命令【第一篇】

    1.创建一个目录/data 记忆方法:英文make directorys缩写后就是mkdir. 命令: mkdir /data 或 cd /;mkdir data #提示:使用分号可以在一行内分割两个 ...

  9. LeetCode All in One 题目讲解汇总(持续更新中...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...

  10. 记从安装centos系统在到使用mono3.2部署MVC过程遇到的问题

    一.安装虚拟机并安装配置系统 我不太愿意去下载vmware就用系统里面自带的Hyper-V 系统我选择了最新版本的CentOs6.4 下载地址:http://mirrors.163.com/cento ...