JPA EnableJpaAuditing 审计功能
关于自动填充或更新实体中的 CreateDate、CreatedBy 等在之前有一篇 jeecg 默认为空的字段值是如何被填充的? 有提到通过拦截器的方式实现,但是今天带大家了解一下如果使用 JPA 的审计功能是如何简单实现该操作的。
JPA Audit 说明
在 Spring JPA 中,支持在字段或者方法上进行注解 @CreateDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy
@CreateDate
表示该字段为创建时间时间字段,在这个实体被 insert 的时候,会设置默认值
@CreatedBy
表示该字段为创建人,在这个实体被insert的时候,会设置值。
@LastModifiedDate、@LastModifiedBy同理。
附一张项目中的使用图:
如何使用审计?
难道就像上方图片显示的,只需要加上注解就可以了吗?
显然是否定的。
实体类上添加 @EntityListeners(AuditingEntityListener.class)
在需要的字段上加上 @CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 等注解。
在Xxx Application 启动类上添加 @EnableJpaAuditing
实现 AuditorAware 接口来返回你需要插入的值。重点!
如下是一个基类的代码,实现了 1、2 步:
@Data@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class BaseEntity implements Serializable{
private static final long serialVersionUID = 1L;
@Id @ApiModelProperty(value = "唯一标识") private String id;
@CreatedBy private String createBy;
@CreatedDate @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "创建时间") private Date createTime;
@ApiModelProperty(value = "更新者") @LastModifiedBy private String updateBy;
@LastModifiedDate @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "更新时间") private Date updateTime;
}
第3步,启动类上增加注释:
@SpringBootApplication@EnableJpaAuditingpublic class TmaxApplication {
public static void main(String[] args) { SpringApplication.run(TmaxApplication.class, args); }
/** * 测试中如果无法自动识别,可能是包路径的问题,采用手动声明bean的方式 * @return */ @Bean public UserAuditor setUserAuditorAware(){ return new UserAuditor(); }}
经过测试如果你的实体类上面的多个字段使用了 @CreatedBy 这样的注解,只会有一个生效,也就是说在一次请求中,只会被调用一次
来看第4步,也是最重要的一步:
@Configuration@Slf4jpublic class UserAuditor implements AuditorAware<String> {
/** * 获取当前创建或修改的用户 * @return */ @Override public Optional<String> getCurrentAuditor() {
UserDetails user; try { user = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); return Optional.ofNullable(user.getUsername()); }catch (Exception e){ return Optional.empty(); } }}
关于方法 getCurrentAuditor 中获取用户名的操作可根据自己实际情况书写,比如上方我用到的是 Spring Secirity 的一种写法。
如果文章有错的地方欢迎指正,大家互相留言交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:niceyoo
转载于:https://www.cnblogs.com/niceyoo/p/10908647.html
JPA EnableJpaAuditing 审计功能相关推荐
- Spring Data Jpa 审计功能
Spring Data Jpa的审计功能需要引入下述依赖 <dependency><groupId>org.springframework.boot</groupId&g ...
- SQL Server审计功能入门:CDC(Change Data Capture)
原文:SQL Server审计功能入门:CDC(Change Data Capture) 介绍 SQL Server 2008引入了CDC(Change Data Capture),它能记录: 1. ...
- mysql 操作审计_利用mysql的audit审计功能记录用户操作信息
mysql数据库中我们如果想记录用户的操作信息,可以通过audit审计功能来来实现.该功能是被自动触发的,在文件plugin_audit.h中可以看到比较详细的定义.在audit插件中,可控制的变量包 ...
- mysql审计权限_MySQL对普通用户(没有super)开启审计功能
最近有发现有坏蛋delete 了数据,找不到是哪个user 哪个host,发现mysql 是可以对没有super 权限的用户开启审计功能,oracle早就 最近有发现有坏蛋delete 了数据,找不到 ...
- mysql基于init-connect+binlog完成审计功能
目前社区版本的mysql的审计功能还是比较弱的,基于插件的审计目前存在于Mysql的企业版.Percona和MariaDB上,但是mysql社区版本有提供init-connect选项,基于此我们可以用 ...
- mysql5.7审计功能开启_MySQL5.7审计功能windows系统
MySQL5.7审计功能windows系统 MySQL的审计功能,主要可以记录下对数据库的所有操作,包括登录.连接.对表的增删改查等,便于责任追溯,问题查找,当然一定方面也会影响数据库效率.根据 My ...
- mysql创建只读权限用户_新品速递 | Harbor 修复权限提升漏洞,MySQL Plus 支持密码强度校验以及审计功能...
为了更好的服务 QingCloud 用户,我们推出了『产品速递』栏目,帮助大家梳理青小云家最近上线的新功能和新产品,供大家从中快速选择,得以应用. 1 Harbor On QingCloud 升级至 ...
- mysql审计 社区版有吗_mysql 5.6 社区版上审计功能,不扯皮
官网 https://mariadb.com/kb/en/mariadb/about-the-mariadb-audit-plugin/ 一.环境说明 MySQL 5.6.25 社区版 Mariadb ...
- mssql 数据库审计账户_SQLServer数据库审计功能入门之SQL Server审核 (SQL Server Audit)...
本文主要向大家介绍了SQLServer数据库审计功能入门之SQL Server审核,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 介绍 Audit是SQL Server ...
最新文章
- 4高并发服务器:UDP局域网服务器(组播)
- c语言 4则运算符,C语言学习之路之四-----------C语言的运算符与表达式
- linux iptables_linux 开启独立iptables日志
- jquery广告轮播插件
- 【sklearn第九讲】支持向量机之分类篇
- 项目日报模板_中山首个地下综合管廊项目取得重大进展
- 共模信号和差模信号的区别和抑制
- Xcode 真机调试 ineligible Devices的解决方法
- java Thread的start和run方法的区别
- redis常用命令总结(慎入)
- F - Nastya and Door
- Haar小波提升算法
- 记录一个网易云IM和直播功能中,服务器API的Java调用代码
- 【综合题】农民挤奶问题
- 云队友丨稻盛和夫:“愚直”的人,终成大器
- 手动修改设置VMware的IP地址
- 生命周期onLoad和onShow的区别
- KVC和KVO简单的区别
- 二维码的识别过程以及柱体二维码的实际应用情况调研报告
- JavaScript实现懒加载
热门文章
- 在LNMP下用nginx 1.4.7配置nagios监控
- Ubuntu开启远程连接
- 《ArcGIS Runtime SDK for Android开发笔记》——(4)、基于Android Studio构建ArcGIS Android开发环境...
- #np.random.normal,产生制定分布的数集(默认是标准正态分布)
- Codeforces Round #309 (Div. 2) C
- spring配置datasource三种方式
- linux kernel内存映射实例分析
- C#基础系列问题一break、continue、return、goto语句
- 函数组:BUSG(SAP 商业图形库)
- 划分vlan,制作trunk口。使同一vlan能互相通讯