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;
}
}