Spring Data Commons审计
原标题:Spring认证|Spring Data Commons审计
7.1.基本
Spring Data 提供了复杂的支持,以透明地跟踪谁创建或更改了实体以及更改发生的时间。要从功能中获益,您必须为实体类配置审计元数据,这些元数据可以使用注释或通过实现接口来定义。此外,必须通过注解配置或 XML 配置来进行审计以注册所需的基础架构组件。有关配置示例,请参见特定于商店的部分。
仅跟踪创建和修改日期的应用程序不需要AuditorAware。
7.1.1. 基于注释的审计元数据
我们提供 CreatedBy 并 LastModifiedBy 操作创建或实体修改的用户,CreatedDate 并 LastModifiedDate 启动更改的时间。
示例75.一个被审计的实体
类客户{
由...制作
私人用户用户;
创建日期
私人即时 createdDate;
//...省略更多属性
}
如您可以有选择地注释,具体可用于您要应用的信息。进行更改时的注释注释可用于Joda-Time DateTime、旧版JavaDate 和所用日历、JDK8 日期和时间以及或长。
审计元数据特别需要存在于根级实体中,但可以添加到嵌入式实体中(用户实际使用的存储),如下面的截图所示。
示例76. 审计嵌入实体中的元数据
类客户{
私有审计元数据审计元数据;
//...省略更多属性
}
类审计元数据{
由...制作
私人用户用户;
创建日期
私人即时 createdDate;
}
7.1.2. 基于接口的审计元数据
如果您不想使用注释来定义审计元数据,您可以让您的域类实现该可审计接口。它公开了所有审计属性的设置方法。
7.1.3. 审计员意识
如果您使用@CreatedBy 或@LastModifiedBy,审计基础结构需要以某种方式了解当前主体。为此,我们提供了一个AuditorAwareSPI 接口,您实现该接口以告知基础设施当前与应用程序交互的用户或系统是谁。泛型类型定义了用什么类型注释的属性@CreatedBy或@LastModifiedBy必须是什么类型。
下面示例显示了使用 Spring SecurityAuthentication 对象的接口的实现:
例 77.AuditorAware 基于 Spring Security 的实现
类
SpringSecurityAuditorAware 实现了 AuditorAware {
@覆盖
公共可选 getCurrentAuditor() {
返回 Optional.ofNullable(
SecurityContextHolder.getContext())
.map(SecurityContext::getAuthentication)
.filter(Authentication::isAuthenticated)
.map(认证::getPrincipal)
.map(User.class::cast);
}
}
该实现访问Authentication Spring Security 提供的对象并查找UserDetails 您在UserDetailsService 实现中创建的自定义实例。我们模仿您通过UserDetails 实现公开域用户,但根据发现的身份验证,您也可以从任何地方查找它。
7.1.4. 反应式审计员
使用反应式基础架构时,您可能希望使用上下文信息来提供@CreatedBy提供@LastModifiedBy信息。我们提供了一个ReactiveAuditorAwareSPI接口,您必须或实现该接口告知基础设施当前与应用程序交互的用户或系统是谁。泛型类型定义了用什么类型注释的属性@CreatedBy或@LastModifiedBy必须是什么类型。
下面示例显示了使用响应式Spring SecurityAuthentication对象的接口实现:
Example 78.ReactiveAuditorAware 基于 Spring Security 的实现
类
SpringSecurityAuditorAware 实现 ReactiveAuditorAware {
@覆盖
公共单声道 getCurrentAuditor() {
返回
ReactiveSecurityContextHolder.getContext()
.map(SecurityContext::getAuthentication)
.filter(Authentication::isAuthenticated)
.map(认证::getPrincipal)
.map(User.class::cast);
}
}
该实现访问Authentication Spring Security 提供的对象并查找UserDetails 您在UserDetailsService 实现中创建的自定义实例。我们模仿您通过UserDetails 实现公开域用户,但根据发现的身份验证,您也可以从任何地方查找它。
内容来源:(Spring中国教育管理中心)#spring认证#