• ABP文档


    文档目录

    本节内容:

    简介

    维基百科:“一个审计追踪(也叫审计日志)是一个安全相关的时序记录、记录组、和/或记录源和目标,作为任何时候一个特殊操作带来影响的一序列活动的书面文件”。

    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;
        }
    
        //...
    }

    这里有一个审计配置列表:

    • IsEnabled:启用/禁用整个审计系统,默认:true。
    • IsEnabledForAnonymousUsers:如果设为true,在用户未登录系统的情况下,也会保存审核日志。默认为:false。
    • Selectors:选择其它类来保存审核日志

    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的一个单独的属性上,因此,你可以在审计日志里隐藏敏感数据,例如密码。

    注意

    • 为记录审计日志,方法必须是public,private和protected方法会被忽略。
    • 如果通过类引用调用一个方法,这个方法必须为virtual,如果类是通过它的接口被注入,那这就不是必要的(如通过注入IPersonService接口来使用PersonService类),ABP使用动态代理和拦截器,所以这又是必要的。这对于Mvc控制器的Action不适用,因为它们可能不为virtual。
  • 相关阅读:
    【MongoDB】Re02 文档CRUD
    【Zookeeper】Win平台伪集群搭建
    【HalfLife】 Steam 安装半条命模组
    【Kafka】03 Shell 操作
    【Kafka】02 原生集群部署
    【Hessian】轻量级分布式通信组件
    【MySQL】主从配置
    【Excel】VBA编程 02 访问MySQL数据库
    【MongoDB】Re01 安装与基础操作
    【Oracle】SQL笔记
  • 原文地址:https://www.cnblogs.com/kid1412/p/6009881.html
Copyright © 2020-2023  润新知