审计日志_ABPvNext框架文档解读29-审计日志

审计日志_ABPvNext框架文档解读29-审计日志

2023年7月18日发(作者:)

审计⽇志_ABPvNext框架⽂档解读29-审计⽇志维基百科: "审计跟踪(也称为审计⽇志)是⼀种安全相关的按时间顺序记录,记录集或记录⽬的和来源. 这种记录提供了在任何特定时间的操作,过程或事件产⽣影响活动顺序的⽂件证据 ".ABP框架提供⼀个可扩展的审计⽇志系统,根据约定⾃动记录审计⽇志,并提供配置控制审计⽇志的级别.⼀个审计⽇志对象通常是针对每个web请求创建和保存的.包括;请求和响应的细节 (如URL,HTTP⽅法,浏览器信息,HTTP状态代码...等).执⾏的动作 (控制器操作和应⽤服务⽅法调⽤及其参数).实体的变化 (在Web请求中).异常信息 (如果在执⾏请求时发⽣).请求时长 (测量应⽤程序的性能).启动模板已经将审计⽇志系统配置为适⽤于⼤多数应⽤程序. 本⽂档介绍了对审计⽇志系统更精细的控制.数据库提供程序⽀持Entity Framework Core提供程序完全⽀持.MongoDB提供程序不⽀持实体更改审计记录. 其他功能按预期⼯作.UseAuditing()UseAuditing() 中间件应该被添加到 Core请求管道,⽤于创建和保存审计⽇志. 如果你使⽤启动模板创建的应⽤程序,它已经默认添加.AbpAuditingOptionsAbpAuditingOptions 是配置审计⽇志系统的主要options对象. 你可以在模块的 ConfigureServices ⽅法中进⾏配置:Configure(options =>{ led = false; //Disables the auditing system});这⾥是可以配置的选项列表:IsEnabled (默认值: true): 启⽤或禁⽤审计系统的总开关. 如果值为 false,则不使⽤其他选项.HideErrors (默认值: true): 在保存审计⽇志对象时如果发⽣任何错误,审计⽇志系统会将错误隐藏并写⼊常规⽇志. 如果保存审计⽇志对系统⾮常重要, 那么将其设置为 false 以便在隐藏错误时抛出异常.IsEnabledForAnonymousUsers (默认值: true): 如果只想为经过⾝份验证的⽤户记录审计⽇志,请设置为 false.如果为匿名⽤户保存审计⽇志,你将看到这些⽤户的 UserId 值为 LogOnException(默认值: true): 如果设置为 true,将始终在异常/错误情况下保存审计⽇志,不检查其他选项(IsEnabled 除外,它完全禁⽤了审计⽇志).IsEnabledForGetRequests (默认值: false): HTTP GET请求通常不应该在数据库进⾏任何更改,审计⽇志系统不会为GET请求保存审计⽇志对象. 将此值设置为 true 可为GET请求启⽤审计⽇志系统.ApplicationName: 如果有多个应⽤程序保存审计⽇志到单⼀的数据库,使⽤此属性设置为你的应⽤程序名称区分不同的应⽤程序⽇志.IgnoredTypes: 审计⽇志系统忽略的 Type 列表. 如果它是实体类型,则不会保存此类型实体的更改. 在序列化操作参数时也使⽤此列表.EntityHistorySelectors:选择器列表,⽤于确定是否选择了⽤于保存实体更改的实体类型.Contributors: AuditLogContributor 实现的列表. 贡献者是扩展审计⽇志系统的⼀种⽅式.实体历史选择器保存你的所有实体的所有变化将需要⼤量的数据库空间. 出于这个原因审计⽇志系统不保存实体的任何改变,除⾮你明确地对其进⾏配置.要保存的所有实体的所有更改,只需使⽤ AddAllEntities() 扩展⽅法.Configure(options =>{ Entities();});HistorySelectors 实际上是⼀个类型谓词的列表,你可以写⼀个lambda表达式定义过滤器.下⾯的⽰例中与使⽤ AddAllEntities() 扩展⽅法效果相同:Configure(options =>{ ( new NamedTypeSelector( "MySelectorName", type => { if (条件 typeof(IEntity).IsAssignableFrom(type) 对于任何实现 IEntity 接⼝的类(从技术上来说这些都是你应⽤程序中的实体) 结果都为true . 你可以根据⾃⼰的逻辑编写条件并返回 true 或 HistorySelectors 是⼀种灵活动态的选择实体进⾏审计⽇志记录的⽅法. 另⼀种⽅法是为每个实体使⽤ Audited 和DisableAuditing attribute.启⽤/禁⽤审计⽇志服务启⽤/禁⽤ Controllers & Actions默认所有的控制器动作都会被记录下来(有关GET请求,请参阅上⾯的 IsEnabledForGetRequests ).你可以使⽤ [DisableAuditing] 来禁⽤特定的控制器:[DisableAuditing]public class HomeController : AbpController{ //...}使⽤ [DisableAuditing] 在action级别控制:public class HomeController : AbpController{ [DisableAuditing] public async Task Home() { //... } public async Task OtherActionLogged() {

启⽤/禁⽤ 应⽤服务&⽅法应⽤服务也默认包含在审计⽇志中. 你可在服务或⽅法级别使⽤ [DisableAuditing].启⽤/禁⽤ 其他服务可以为任何类型的类(注册到依赖注⼊并从依赖注⼊解析)启⽤审计⽇志,默认情况下仅对控制器和应⽤程序服务启⽤.对于任何需要被审计记录的类或⽅法都可以使⽤ [Audited] 和IAuditingEnabled.此外,你的类可以(直接或固有的)实现 IAuditingEnabled接⼝以确认启⽤该类的审计⽇志记录.启⽤/禁⽤ 实体 & 属性以下情况下实体在实体更改审计⽇志记录中忽略实体;如果将实体类型添加到 dTypes,它在审计⽇志系统中被完全忽略.如果对象不是实体(没有直接或固有的实现 IEntity - 所有实体默认实现这个接⼝).如果实体访问级别不是public的.你可以使⽤ Audited 来启⽤实体更改审计⽇志:[Audited]public class MyEntity : Entity{ //...}或者禁⽤实体:[DisableAuditing]public class MyEntity : Entity{ //...}只有前⾯提到的 HistorySelector 选择实体时才有必要禁⽤审计⽇志记录.你可以仅禁⽤实体的某些属性的审计,以审计⽇志记录进⾏精细控制:[Audited]public class MyUser : Entity{ public string Name { get; set; } public string Email { get; set; } [DisableAuditing] //Ignore the Passoword on audit审计⽇志系统保存 MyUser 实体的更改,出于安全的⽬的忽略 Password 属性.在某些情况下你可能要保存⼀些属性,但忽略所有其他属性. 为忽略的属性编写 [DisableAuditing] 将很乏味. 这种情况下将 [Audited] ⽤于所需的属性,使⽤ [DisableAuditing] 属性标记该实体:[DisableAuditing]public class MyUser : Entity{ [Audited] //Only log the Name change public string Name { get; set; } public string Email { get; set; } pIAuditingStoreIAuditingStore 是⼀个接⼝,⽤于保存ABP框架的审计⽇志对象. 如果需要将审计⽇志对象保存到⾃定义数据存储中,可以在⾃⼰的应⽤程序中实现 IAuditingStore 并在依赖注⼊系统替换.如果没有注册审计存储,则使⽤ SimpleLogAuditingStore. 它只是将审计对象写⼊标准⽇志系统.审计⽇志模块已在启动模板中配置,它将审计⽇志对象保存到数据库中(⽀持多个数据库提供程序). 所以⼤多数时候你并不需要关⼼IAuditingStore 是如何实现和使⽤的.审计⽇志对象默认为每个web请求创建⼀个审计⽇志对象,审计⽇志对象可以由以下关系图表⽰:AuditLogInfo: 具有以下属性:ApplicationName: 当你保存不同的应⽤审计⽇志到同⼀个数据库,这个属性⽤来区分应⽤程序.UserId:当前⽤户的Id,⽤户未登录为 me:当前⽤户的⽤户名,如果⽤户已经登录(这⾥的值不依赖于标识模块/系统进⾏查找).TenantId: 当前租户的Id,对于多租户应⽤.TenantName: 当前租户的名称,对于多租户应⽤.ExecutionTime: 审计⽇志对象创建的时间.ExecutionDuration: 请求的总执⾏时间,以毫秒为单位. 可以⽤来观察应⽤程序的性能.ClientId: 当前客户端的Id,如果客户端已经通过认证.客户端通常是使⽤HTTP API的第三⽅应⽤程序.ClientName: 当前客户端的名称,如果有的话.ClientIpAddress: 客户端/⽤户设备的IP地址.CorrelationId: 当前相关Id. 相关Id⽤于在单个逻辑操作中关联由不同应⽤程序(或微服务)写⼊的审计⽇志.BrowserInfo: 当前⽤户的浏览器名称/版本信息,如果有的话.HttpMethod: 当前HTTP请求的⽅法(GET,POST,PUT,DELETE ...等).HttpStatusCode: HTTP响应状态码.Url: 请求的ogActionInfo: ⼀个 审计⽇志动作通常是web请求期间控制器动作或应⽤服务⽅法调⽤. ⼀个审计⽇志可以包含多个动作. 动作对象具有以下属性:ServiceName:执⾏的控制器/服务的名称.MethodName:控制器/服务执⾏的⽅法的名称.Parameters:传递给⽅法的参数的JSON格⽂本.ExecutionTime: 执⾏的时间.ExecutionDuration: ⽅法执⾏时长,以毫秒为单位. 可以⽤来观察⽅法的性能.EntityChangeInfo: 表⽰⼀个实体在Web请求中的变更. 审计⽇志可以包含0个或多个实体的变更. 实体变更具有以下属性:ChangeTime: 当实体被改变的时间.ChangeType:具有以下字段的枚举: Created(0), Updated(1)和 Deleted(2).EntityId: 更改实体的TenantId:实体所属的租户TypeFullName: 实体的类型(类)的完整命名空间名称(例如Book实体的PropertyChangeInfo: 表⽰⼀个实体的属性的更改.⼀个实体的更改信息, 可含有具有以下属性的⼀个或多个属性的更改:NewValue: 属性的新值. 如果实体已被删除为 alValue:变更前旧/初始值. 如果实体是新创建为 tyName: 实体类的属性名称.PropertyTypeFullName:属性类型的完整命名空间名称.Exception: 审计⽇志对象可能包含零个或多个异常. 可以得到失败请求的异常信息.Comment:⽤于将⾃定义消息添加到审计⽇志条⽬的任意字符串值. 审计⽇志对象可能包含零个或多个注释.除了上⾯说明的标准属性之外,AuditLogInfo, AuditLogActionInfo 和 EntityChangeInfo 对象还实现了IHasExtraProperties 接⼝,你可以向这些对象添加⾃定义属性.审计⽇志贡献者你可以创建类继承 AuditLogContributor类 来扩展审计系统,该类定义了 PreContribute 和 PostContribute ⽅法.唯⼀预构建的贡献者是 AspNetCoreAuditLogContributor 类,它设置HTTP请求的相关属性.贡献者可以设置 AuditLogInfo 类的属性和集合来添加更多信息.例:public class MyAuditLogContributor : AuditLogContributor{ public override void PreContribute(AuditLogContributionContext context) { var eProvider 可以从依赖注⼊系统中解析服务.nfo 可以⽤来访问当前审计⽇志的对象并进⾏操作.创建贡献者后,需要将其添加到 butors 列表中:Configure(options =>{ (new MyAuditLogContributor());});IAuditLogScope & IAuditingManager审计⽇志范围是构建和保存审计⽇志对象的环境范围. 默认审计⽇志中间件会为Web请求创建审计⽇志范围(请参阅上⾯的 UseAuditing()部分).获取当前审计⽇志范围审计⽇志贡献者是操作审计⽇志对象的全局⽅法. 你可从服务中获得值.如果需要在应⽤程序的任意位置上操作审计⽇志对象,可以访问当前审计⽇志范围并获取当前审计⽇志对象(与范围的管理⽅式⽆关). 例:public class MyService : ITransientDependency{ private readonly IAuditingManager _auditingManager; public MyService(IAuditingManager auditingMa总是检查 _t 是否为空,因为它是在外部范围中控制的,在调⽤⽅法之前你不知道是否创建了审计⽇志范围.⼿动创建审计⽇志范围很少需要⼿动创建审计⽇志的范围,但如果你需要,可以使⽤ IAuditingManager 创建审计⽇志的范围. 例:public class MyService : ITransientDependency{ private readonly IAuditingManager _auditingManager; public MyService(IAuditingManager auditingMa你可以调⽤其他服务,它们可能调⽤其他服务,它们可能更改实体,等等. 所有这些交互都保存为finally块中的⼀个审计⽇志对象.审计⽇志模块审计⽇志模块基本上实现了 IAuditingStore, 将审计⽇志对象保存到数据库中, 并⽀持多个数据库提供程序. 默认此模块已添加到启动模板中.

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689644066a273307.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信