langchenglc
1/7/2019 - 5:44 AM

配置spring data jpa的 Auditor审计功能

配置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	
}