原创
JPA实体类crud监听器以及审计功能
温馨提示:
本文最后更新于 2020年11月14日,已超过 1,469 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
什么是审计功能?
需要开启JPA的Audit审计功能@EnableJpaAuditing
数据库审计一般是指跟踪和记录与持久化实体相关的事件,或者仅仅是实体版本跟踪。
1.@CreatedBy、@CreatedDate…
开启了审计功能,就可以使用JPA提供的一些功能。
@Column(length = 32)
@CreatedBy
private String createBy;
@Column(length = 32)
@LastModifiedBy
private String updateBy;
@Column(nullable = false, updatable = false)
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@CreatedDate
private LocalDateTime createTime;
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@LastModifiedDate
private LocalDateTime updateTime;
创建时间和更新时间会自动设置并插入数据库,但是createBy
和updateBy
并没有赋值,因为需要实现AuditorAware
接口来返回你需要插入的值。
@Component
public class SpringSecurityAuditorAware implements AuditorAware<String> {
@Override
public String getCurrentAuditor() {
// 返回会话中或者指定的用户名
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null) {
throw new CustomException(ResultStatus.UNAUTHORIZED, "当前登录状态过期");
}
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
return userDetails.getUsername();
}
}
2.Crud前后
开启了审计功能,然后还有…可以做一些你想做的crud前后的事情…
e.g.我需要自己手段设置一些值的话…
/**
* 实体类crud监听器
*
* @author Zhaopo Liu
*/
@Slf4j
@Component
public class EntityListener {
/**
* 新增操作之前
* e.g.我需要自己手段设置一些值的话...
*
* @param target
*/
@PrePersist
public void PrePersist(Object target) {
log.debug("新增操作之前...");
Assert.notNull(target, "Entity must not be null!");
if (target instanceof BaseEntity) {
BaseEntity baseEntity = (BaseEntity) target;
User user = SpringContextHolder.getBean(UserService.class).findByAccount(SecurityUtil.getCurrentUsername());
if (user != null) {
baseEntity.setCreateByName(user.getName());
baseEntity.setUpdateByName(user.getName());
}
}
}
/**
* 新增操作之后
*
* @param target
*/
@PostPersist
public void PostPersist(Object target) {
log.debug("新增操作之后...");
}
/**
* 更新操作之前
*
* @param target
*/
@PreUpdate
public void PreUpdate(Object target) {
log.debug("更新操作之前...");
}
/**
* 更新操作之后
*
* @param target
*/
@PostUpdate
public void PostUpdate(Object target) {
log.debug("更新操作之后...");
}
/**
* 删除操作之前
*
* @param target
*/
@PreRemove
public void PreRemove(Object target) {
log.debug("删除操作之前...");
}
/**
* 删除操作之后
*
* @param target
*/
@PostRemove
public void PostRemove(Object target) {
log.debug("删除操作之后...");
}
}
实体类使用:
@EntityListeners({AuditingEntityListener.class, EntityListener.class})
- 本文标签: Java SpringSecurity
- 本文链接: http://www.lzhpo.com/article/159
- 版权声明: 本文由lzhpo原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权