配置hibernate Auditor审计; 在实体中通过添加注解,自动获取当前修改,添加人员信息;
在spring boot的入口处开启审计功能 @EnableJpaAuditing(auditorAwareRef = "auditorAware")
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import java.util.Optional;
@Configuration
public class UserAuditorAware implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
SecurityContext ctx = SecurityContextHolder.getContext();
if (ctx == null) {
return Optional.empty();
}
if (ctx.getAuthentication() == null) {
return Optional.empty();
}
if (ctx.getAuthentication().getPrincipal() == null) {
return Optional.empty();
}
Object principal = ctx.getAuthentication().getPrincipal();
if (principal.getClass().isAssignableFrom(User.class)) {
return Optional.of(((User) principal).getUsername());
} else {
return Optional.empty();
}
}
}
@Entity
@EntityListeners(AuditingEntityListener.class)
@JsonInclude( JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
public class Model implements Serializable{
@Id
@Column(unique = true, nullable = false,columnDefinition = "bigint")
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
@CreationTimestamp
@Column(columnDefinition="datetime COMMENT '登录时间'")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date createTime;
@CreatedBy
@Column(columnDefinition = "varchar(100) COMMENT '创建人'")
private String createBy;
@UpdateTimestamp
@Column(columnDefinition = "datetime COMMENT '修改时间'")
private Date lastModifiedDate;
@LastModifiedBy
@Column(columnDefinition = "varchar(100) COMMENT '修改人'")
private String lastModifiedBy;
//.....todo add getter and setter
}