Auditing
意思是审计/审核。
业务系统中每张表基本都存在创建时间,更新时间,创建人,修改人,并且方便我们记录操作日志。
问题1 每张表都需要做重复的工作吗?
每张表操作是需要重复工作,目的方便记录日志
问题2 每操作一张表都需要写重复的代码吗?
可以封装代码,自己分装的代码需要时间,bug有多,有没有更好的解决方案,spring data 为我们提供了更方便的操作,如:
@CreatedDate
创建时间@LastModifiedDate
最后一次修改时间@CreatedBy
创建人@LastModifiedBy
最后一次修改人
提取公用属性自动填写。再也不用操心操作记录和时间问题。
创建人如何实现,spring data 提供了AuditorAware
接口告诉JPA当前的用户是谁
package com.app.security.entity;
import com.app.security.config.JwtUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.AuditorAware;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.Optional;
@Slf4j
@Component
public class AuditorAwareImpl implements AuditorAware<SysUser>, Serializable {
private Optional<SysUser> auditor=Optional.empty();
/**
* @param auditor the auditor to set
*/
public void setAuditor(SysUser auditor) {
this.auditor = Optional.of(auditor);
}
/*
* (non-Javadoc)
* @see org.springframework.data.domain.AuditorAware#getCurrentAuditor()
*/
public Optional<SysUser> getCurrentAuditor() {
SysUser user=null;
boolean present = auditor.isPresent();
if(!present) {
try {
//获取当前用户,可以从session/缓存/token等地方获取用户
user = JwtUtil.getUser();
} catch (Exception e) {
log.error("更新&添加--->用户获取失败");
}
if(user!=null)auditor=auditor.of(user);
}
return auditor;
}
}