本节内容:
简介
维基百科:"一个审计追踪(也叫审计日志)是一个安全相关的时序记录、记录组、和 / 或记录源和目标,作为任何时候一个特殊操作带来影响的一序列活动的书面文件"。
ABP 提供一个基础框架来自动记录所有与应用的交互,它能记录有意的方法调用和调用者信息与参数。
基本上,保存的字段有:相关的租户 id,调用者 id,被调用的服务名(被调用方法的类名),被调用的方法名,执行参数(序列化成 Json),执行时间,执行时长(毫秒),客户端 IP,客户端电脑名和异常(如果方法抛出一个异常)。
有了这些信息,我们不仅能知道谁做了操作,也能测量应用的性能和观察异常,甚至更多,如你可以统计你应用的使用频次。
审计系统使用 IAbpSeesion 来获取当前 UserId 和 TenantId。
应用服务、Mvc 控制器、web Api 和 Asp.net Core 方法默认情况下被自动审计。
关于 IAuditingStore
审计系统使用 IAuditingStore 来保存审计信息,虽然你可以用你自己的方式实现它,但在 module-zero 项目里已经完全实现。如果你没有实现它,SimpleLogAuditingStore 会被使用,它把审计信息写入。
配置
为配置审计,你可以在你的的 PreInitialize 方法里使用 Configuration.Auditing 属性。审计默认可用,你可以用如下方式禁用它:
- public class MyModule: AbpModule {
- public override void PreInitialize() {
- Configuration.Auditing.IsEnabled = false;
- }
- //...
- }
这里有一个审计配置列表:
Selectors 是一个谓词列表,用其它类型来保存审核日志,一个选择器有一个唯一的名称和一个谓词,在这个列表里唯一默认的选择器是用来选择应用服务类的,它的定义如下所示:
- Configuration.Auditing.Selectors.Add(new NamedTypeSelector("Abp.ApplicationServices", type = >typeof(IApplicationService).IsAssignableFrom(type)));
你可在你的模块的 PreInitialize 方法里添加自己的选择器,同样,如果你不想为应用服务保存审计日志,可通过名称移除选择器,这就是为什么需要一个唯一的名称的原因(如果你想,可以使用简单的 Linq 在 Selector 里找到一个选择器,并移除它)。
注意:除了标准的审计配置,Mvc 和 Asp.net Core 模块为 Action 定义了启用 / 禁用审计日志的配置。
通过特性启用 / 禁用
虽然你可以通过配置选择审计类,但你可以为一个单独的类、方法使用 Audited 和 DisableAuditing 特性,例如:
- [Audited] public class MyClass {
- public void MyMethod1(int a) {
- //...
- } [DisableAuditing] public void MyMethod2(string b) {
- //...
- }
- public void MyMethod3(int a, int b) {
- //...
- }
- }
除了 MyMethod2,MyClass 类的其它方法都被审计了,因为 MyMethod2 显式禁用了审计,Audited 特性可用在一个方法上,只对关心的方法进行审计。
DisableAuditing 可用在一个 DTO 的一个单独的属性上,因此,你可以在审计日志里隐藏敏感数据,例如密码。
注意
来源: http://www.cnblogs.com/kid1412/p/6009881.html