返回总目录


本篇目录


介绍

维基百科说: “审计跟踪(也叫审计日志)是与安全相关的按照时间顺序的记录,记录集或者记录源,它们提供了活动序列的文档证据,这些活动序列可以在任何时间影响一个特定的操作,步骤或其他”。

ABP提供了一个基础设施,它可以自动记录所有和应用程序交互的日志。它可以记录具有调用者信息和参数的方法调用。

一般地,要保存的字段是:相关的租户Id,调用者的用户Id,调用的 服务名称(调用方法的类名),调用的方法名 , 执行方法名(序列化成Json) , 执行时间 , 执行时长(单位毫秒),客户端IP地址 ,客户端计算机名称异常(抛出异常的情况下)。

有了这些信息,我们不仅知道谁进行了该操作,而且可以测量应用的性能以及观察抛出的异常。甚至,你可以获得应用使用情况的统计数据(statistics)

审计系统使用IAbpSession来获得当前的UserId和TenantId。

关于 IAuditingStore

审计系统使用了IAuditingStore来存储信息。虽然你可以用你自己的方式来实现该接口,但是它已经完全实现在module-zero项目中。如果你没有实现该接口,那么默认会使用SimpleLogAuditingStore,并且它会将审计信息记录到日志中(log)。

配置

要配置审计,可以在模块的PreInitialize方法中使用Configuration.Auditing属性。审计是默认开启的。可以像下面那样关闭它:

public class MyModule : AbpModule
{
public override void PreInitialize()
{
Configuration.Auditing.IsEnabled = false;
} //...
}

这儿是审计配置属性的列表:

  • IsEnabled:用于完全开启或关闭审计系统。默认为true。
  • IsEnabledForAnonymousUsers:如果此值为true,那么没有登录到系统的用户的审计日志也会保存。默认为false。
  • MvcControllers:用于为ASP.NET MVC控制器配置审计。
    • IsEnabled:用于为MVC控制器开启或关闭审计。默认为true
    • IsEnabledForChildActions:用于为子MVC action开启或关闭审计。默认为false。
  • Selectors:用于选择其他的类保存审计日志。

可以看到,对于MVC控制器的审计是单独配置的,因为它用到了不同的技术。

Selectors是选择其他的类型来保存审计日志的谓词列表。一个选择器有一个唯一的名字和一个谓词。这个列表中唯一的默认选择器用于选择应用服务类。它是如下定义的:

Configuration.Auditing.Selectors.Add(
new NamedTypeSelector(
"Abp.ApplicationServices",
type => typeof (IApplicationService).IsAssignableFrom(type)
)
);

你可以将你的选择器添加到模块的PreInitialize方法中。而且,如果你不喜欢为应用服务保存审计日志,那么你可以通过名称移除选择器。那就是为什么要有一个唯一名称的原因(使用简单的linq找出该选择器,然后可以移除它)。

通过特性开启/关闭

虽然可以通过配置选择审计类,但是也可以为一个单独的类或方法使用AuditedDisableAuditing特性。举个例子:

[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显式关闭了。审计特性可以用于想要参与审计的方法保存审计日志。

注意

  • 为了保存审计日志,方法必须是public的。私有的和受保护的方法会被忽略。
  • 如果方法是通过类的引用调用的,那么该方法必须是virtual的。因为ABP使用了动态代理和拦截,所以需要满足该条件。如果使用了接口(比如注入IPersonService接口使用PersonService类)注入,就不必满足“virtual”的条件了。对于MVC控制器的action不一定要满足,它们可以不是“virtual”的。

我项目中的例子

下面的代码是点击登录按钮提交表单数据的action方法:

[HttpPost]
[UnitOfWork]
[DisableAuditing]
public virtual async Task<JsonResult> Login(LoginViewModel loginModel, string returnUrl = "")
{
CheckModelState(); _unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant);
var loginResult = await GetLoginResultAsync(
loginModel.UsernameOrEmailAddress,
loginModel.Password,
loginModel.TenancyName
);
await SignInAsync(loginResult.User, loginResult.Identity, loginModel.RememberMe); if (string.IsNullOrWhiteSpace(returnUrl))
{
returnUrl = Request.ApplicationPath;
}
return Json(new MvcAjaxResponse { TargetUrl = returnUrl });
}

下面的截图是数据库中的审计日志信息,大家可以看到今天还没有数据,最晚的数据是2015-12-18的数据:

登录系统之后,依然没有记录审计日志,下面统一截图。

下面我将上面的代码的特性[DisableAuditing]去掉,再次登录系统,可以看到有了审计记录,截图如下:

分别按序号解释一下:

  1. 首次到达登录页面;
  2. 登录成功,到达系统首页Index;
  3. 去掉[DisableAuditing]特性后,到达登陆页面;
  4. 将数据post提交到Login方法,记录了审计日志,包含各种登录参数;
  5. 登录成功,返回系统首页Index。

从我的例子可以很明显地看出,默认情况下,ABP会自动记录所有的控制器,除非你给它加上[DisableAuditing]特性,否则,始终会记录审计日志。

ABP理论学习之审计日志的更多相关文章

  1. ABP文档 - 审计日志

    文档目录 本节内容: 简介 关于 IAuditingStore 配置 通过特性启用/禁用 注意 简介 维基百科:“一个审计追踪(也叫审计日志)是一个安全相关的时序记录.记录组.和/或记录源和目标,作为 ...

  2. ABP大型项目实战(2) - 调试与排错 - 日志 - 查看审计日志

    这是<ABP大型项目实战>系列文章的一篇.   项目发布到生产环境后难免会有错误. 那么如何进行调试和排错呢?   我看到俱乐部里有人是直接登陆生产服务器把数据库下载到开发机器进行调试排错 ...

  3. ABP(现代ASP.NET样板开发框架)系列之19、ABP应用层——审计日志

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之19.ABP应用层——审计日志 ABP是“ASP.NET Boilerplate Project (ASP.NET ...

  4. ABP应用层——审计日志

    ABP应用层——审计日志 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之19.ABP应用层——审计日志 ABP是“ASP.NET Boilerplate Pro ...

  5. ABP官方文档翻译 4.6 审计日志

    审计日志 介绍 关于IAuditingStore 配置 通过特性启用/禁用 注意事项 介绍 维基百科:“审计追踪(也称为审计日志)是与安全相关的按时间先后的记录.记录集合.记录的目的地和源,提供一系列 ...

  6. Abp + MongoDb 改造默认的审计日志存储位置

    一.背景 在实际项目的开发当中,使用 Abp Zero 自带的审计日志功能写入效率比较低.其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起.所以我们可以重新实现 Abp 的 IAuditi ...

  7. ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理

    我们了解ABP框架内部自动记录审计日志和登录日志的,但是这些信息只是在相关的内部接口里面进行记录,并没有一个管理界面供我们了解,但是其系统数据库记录了这些数据信息,我们可以为它们设计一个查看和导出这些 ...

  8. ABP vNext 审计日志获取真实客户端IP

    背景 在使用ABP vNext时,当需要记录审计日志时,我们按照https://docs.abp.io/zh-Hans/abp/latest/Audit-Logging配置即可开箱即用,然而在实际生产 ...

  9. ABP理论学习之开篇介绍

    返回总目录 为了和2016年春节赛跑,完成该系列博客,我牺牲了今天中午的时间来完成该系列的第一篇----开篇介绍.开篇介绍嘛,读过大学教材的同学都知道,这玩意总是那么无聊,跟考试没关系,干脆直接跳过, ...

随机推荐

  1. TADOQuery学习总结

    上一篇讲解了一些TADOQuery的简单的用法,但是还有很多方法没有讲到,这里就直接拿来主义,转载一篇<TADOQuery学习总结>为我所用. 1.Create三种参数的区别 TADOQu ...

  2. 【Mybatis架构】 延迟加载

    在上一篇博客中,我们提到过有关于Mybatis输出映射中resultMap能够实现延迟加载的事,然而真的是所有的resultMap都能实现延迟加载还是咋地啊?现在我们就来对那一句话做一下阐述和实例说明 ...

  3. John the ripper使用教程

    破解Linux的用户密码:John [跨平台的密码解密工具] root@only:~# unshadow /etc/passwd /etc/shadow > ~/file_to_crack ro ...

  4. 【Gson】互相转化

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. 对象转为字符串 Strin ...

  5. hellocharts折线图与柱状图的上下结合酷炫效果(学习笔记)

    二话不说先贴图 贴代码: LineColumnDependencyActivity.java package com.shaoxin.mylinecolumndependencyactivity; i ...

  6. JAVA基础研究

    package Test; public class L3_1 { public static void main(String[] args) { C c1=new C(100); C c2=new ...

  7. iOS路径沙盒文件管理(转载)

    iOS路径沙盒文件管理,看到博主总结的很好,转载过来,原文:http://www.aichengxu.com/view/35264 一.iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文 ...

  8. sql中查询中的when...then 语句

    ),jbrq, ),'/','-')as jbrq, ' then '启用' when ' then '未启用' else '修改' end cbzt,shzt from jc_yscbfxb sel ...

  9. lamp

      Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立 的程序,但是因为常被放在一起使用,拥有了越来越高的 ...

  10. java-并发-同步

    浏览以下内容前,请点击并阅读 声明 线程间的通信主要是通过访问以及对象引用字段,这种形式的通信非常高效,但是会产生两种可能的错误:线程干扰和内存一致性错误,反正这些错误的工具就是同步. 然而,同步可能 ...