网站首页 > 技术文章 正文
什么是审计?
审计意味着跟踪和记录与数据相关的事务,这只是意味着记录插入、更新和删除操作(用户和/或操作日期)。
如何在 Spring 中添加 @Entity 的创建/更新日期?
这可以使用不同的方法来实现:
- 数据库内置解决方案:Oracle Database 12c、Db2、MySQL Enterprise Audit...
- 创建数据库触发器,
- 使用第三方工具,
- 为每个实体创建更新和创建列,并将每次更改手动记录到数据库中(完全由您自己编写),
- 使用 Spring 审计 :bulb:
最后一个选择不需要接触我们的实体业务逻辑来添加跟踪逻辑,也不需要向实体添加额外的列或额外的表来记录更改。
如果您使用的是 Spring,则可以使用无头解决方案来跟踪您的实体。我们配置一次,随处使用:
Spring Data 提供了复杂的支持来透明地跟踪谁创建或更改了实体以及发生的时间点。(spring)
执行
可能的方法:
1.使用标准JPA实现:
使用实体的表本身来记录更改,在这种情况下我们无法审核删除操作。
2.使用Hibernate提供的审计功能实现:
它登录到实体表以外的表,允许记录删除操作。
3.使用Spring Data JPA提供的审计功能实现:bulb::
为审计属性提供方便的注释,准备与 Spring Security 集成,也不能用于记录删除操作,因为它继承了 JPA 方法的相同缺陷。
接下来我们将介绍使用 Spring Data JPA 实现审计。
:memo: 检查点/待办事项:
- 使用 AuditorAware 和 Spring Security 审计作者(允许添加 @CreatedBy 和 @LastModifiedBy)。
- 通过使用启用 JPA 审计 @EnableJpaAuditing
- 使用 Spring Data Annotations 创建通用可审计类 @CreatedDate ,和 @LastModifiedDate .
- 将可审计类的扩展添加到我们要跟踪的实体。
1-创建 AuditorAware 将用于配置审计的实现:
导入org.springframework.data.domain.AuditorAware;
导入java.util.Optional;
公共 类 AuditorAwareImpl 实现 AuditorAware < String > {
// 返回空而不是用户,因为我们只跟踪日期而不是用户
@Override
public Optional<String> getCurrentAuditor () {
return Optional.empty();
}
// 使用以下获取实际连接的用户
/*
公共用户 getCurrentAuditor() {
身份验证身份验证 = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null || !authentication.isAuthenticated()) {
返回空值;
}
return ((MyUserDetails) authentication.getPrincipal()).getUser();
}
*/
}
2-启用审计,通过将此配置类添加到spring boot项目的配置目录:
导入 org .springframework .context .annotation .Bean;
导入org .springframework .context .annotation .Configuration;
导入org .springframework .data .domain .AuditorAware;
导入org .springframework .data .jpa .repository .config .EnableJpaAuditing;
@配置
@EnableJpaAuditing(auditorAwareRef = "auditorProvider" )
公共类 JpaAuditingConfig {
@豆
AuditorAware<String> auditProvider() {
返回 新的 AuditorAwareImpl ();
}
}
3-一旦启用审计,我们创建 Auditable 类,我们将在任何我们想要的地方扩展(在我们的模型类中):
导入lombok.AllArgsConstructor;
导入lombok.Data;
导入lombok.NoArgsConstructor;
导入org.springframework。数据。注释.CreatedDate;
导入org.springframework。数据。注释.LastModifiedDate;
导入org.springframework。数据.jpa.domain.support.AuditingEntityListener;
导入javax.persistence.Column;
导入javax.persistence.EntityListeners;
导入javax.persistence.MappedSuperclass;
导入java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class Auditable < U >
{
@CreatedDate
@Column(name = "created_date" )
保护日期 createdDate;
@LastModifiedDate
@Column(name = "last_modified_date" )
保护日期 lastModifiedDate;
// 要跟踪修改或创建的用户,请使用 @LastModifiedBy 和 @CreatedBy
//@LastModifiedBy
//受保护的 U lastModifiedBy;
//@CreatedBy
//受保护的U createdBy;
}
4-最后,从 Auditable 类扩展以跟踪更改,例如:
@Data
@Entity
@NoArgsConstructor
@Table (name = "products" )
公共类产品扩展可审核<String> {
@Id
@Column (name = "id" )
@GeneratedValue (strategy=GenerationType.AUTO)
私人长ID;
}
列 created_date 和 last_modified_date 自动添加到 products 数据库中的表中,并且由于Product 类扩展 Auditable 类 createdDate 和 lastModifiedDate 属性可以以相同的方式Product 使用其他属性。
猜你喜欢
- 2024-10-31 爱数AnyRobot:一文详解Oracle运维分析实践
- 2024-10-31 「安全审计」基于Tshark流量抓包的mysql审计
- 2024-10-31 一文带你了解数据库工具的类型 工具数据库主要包括
- 2024-10-31 通过oracle学mysql 通过直接调查或科学试验得到的统计数据
- 2024-10-31 全面解析:MySQL审计插件介绍与配置详解
- 2024-10-31 详细讲解Oracle数据库audit_trail的设置
- 2024-10-31 瑟瑟发抖:Oracle 又出手了。。。。。。
- 2024-10-31 软考-信息安全工程师学习笔记92—Oracle 数据库安全分析与防护
- 2024-10-31 IT审计应该怎么做? it审计的作用
- 2024-10-31 【运维有小邓】Oracle数据库审计 数据库 审计
你 发表评论:
欢迎- 636℃几个Oracle空值处理函数 oracle处理null值的函数
- 629℃Oracle分析函数之Lag和Lead()使用
- 617℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 613℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 611℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 603℃【数据统计分析】详解Oracle分组函数之CUBE
- 590℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 576℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)