什么是代码审计:用于记录实体的创建者、修改者以及操作的对应时间的信息,这些功能在日志记录与数据版本管理中非常有用
阿里手册里要求非常详细,这些审计功能远远不足以满足(如果你和我看的是一门课你就知道我在说谁了)
不过这个功能还是比较强大的,毕竟JPA可以自动修改表,因此可以直接搓一个BaseEntity,里面写好序列化、唯一性的ID加上代码审计需要的四个字段,后续使用很方便
那么先写一下如何实现代码审计这个功能:
1.注入bean
@Configuration
public class UserAuditorAware implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
return Optional.of("");//这里需要放入当前操作的用户信息
}
}
2.在启动类添加注解
@EnableJpaAuditing
3.修改entity,加上类注解和字段注解
类注解为
@EntityListeners(AuditingEntityListener.class)
字段注解分别为
@CreatedBy
private String createdBy;
@CreatedDate
private Date createdDate;
@LastModifiedBy
private String lastModifiedBy;
@LastModifiedDate
private Date lastModifiedDate;
问题注意:
无法记录删除操作,删除后实体数据会被移除(不过这里可以用逻辑删除,加一个deleted字段,可能我后续会写一下),该功能需要spring-aspects.jar
整合一个BaseEntity:
@MappedSuperclass表示当前类不是一个完整的实体类,不会映射到数据库表中,但当前类的属性会映射到子类对应的数据库字段中,因此这个注解是和@Entity、@Table冲突的
@MappedSuperclass
@Getter
@Setter
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
protected Long id;
@CreatedBy
protected String createdBy;
@LastModifiedBy
protected String modifiedBy;
@CreatedDate
protected Date createdDate;
@LastModifiedDate
protected Date modifiedDate;
}