spring data提供支持审计功能:即由谁在什么时候创建或修改实体。spring data提供了在实体类的属性上增加@createdby,@lastmodifiedby,@createddate,@lastmodifieddate注解,并配置相应的配置项,即可实现审计功能,有系统自动记录createdby
createddate
lastmodifiedby
lastmodifieddate
四个属性的值,下面为具体的配置项。
示例
创建一个实体类
package com.hfcsbc.infrastructureservice.domain;
import com.hfcsbc.repository.support.domain.abstractauditingentity;
import lombok.data;
import org.springframework.data.annotation.createdby;
import org.springframework.data.annotation.createddate;
import org.springframework.data.annotation.lastmodifiedby;
import org.springframework.data.annotation.lastmodifieddate;
import org.springframework.data.jpa.domain.support.auditingentitylistener;
import javax.persistence.*;
import java.util.date;
/**
* create by pengchao on 2018/3/7
*/
@entity
@data
@entitylisteners({auditingentitylistener.class})
public class person {
@id
@generatedvalue
private long id;
private string name;
private integer age;
@createdby
@column(
name = "created_by",
nullable = false,
length = 50,
updatable = false
)
private string createdby;
@createddate
@column(
name = "created_date",
nullable = false,
updatable = false
)
private date createddate = new date();
@lastmodifiedby
@column(
name = "last_modified_by",
length = 50
)
private string lastmodifiedby;
@lastmodifieddate
@column(
name = "last_modified_date"
)
private date lastmodifieddate = new date();
}
创建相应的repository
package com.hfcsbc.repository;
import com.hfcsbc.domain.person;
import org.springframework.data.jpa.repository.jparepository;
/**
* create by pengchao on 2018/3/7
*/
public interface personrepository extends jparepository {
}
配置获取用户信息的bean
package com.hfcsbc.infrastructureservice.config;
import org.springframework.data.domain.auditoraware;
import org.springframework.security.core.authentication;
import org.springframework.security.core.context.securitycontextholder;
import org.springframework.stereotype.component;
import java.util.optional;
/**
* create by pengchao on 2018/3/7
*/
@component("auditoraware")
public class auditorawareimpl implements auditoraware {
@override
public optional getcurrentauditor() {
authentication authentication = securitycontextholder.getcontext().getauthentication();
return optional.of(authentication.getprincipal().tostring());
}
}
在spring boot入口类开启审计功能
package com.hfcsbc.infrastructureservice;
import org.springframework.boot.springapplication;
import org.springframework.boot.autoconfigure.springbootapplication;
import org.springframework.data.jpa.repository.config.enablejpaauditing;
import org.springframework.scheduling.annotation.enableasync;
@springbootapplication
@enablejpaauditing(auditorawareref = "auditoraware")
@enableasync
public class personapplication {
public static void main(string[] args) {
springapplication.run(personapplication.class, args);
}
}
即完成配置,在使用repository
保存对象时,createdby
createddate
lastmodifiedby
lastmodifieddate
有审计功能自动插入
注:在异步方法中如何获取用户信息
由于在异步方法中使用repository保存对象,获取不到用户用户信息,需增加如下配置项,即可在authentication获取用户的信息
package com.hfcsbc.config;
import org.springframework.beans.factory.config.methodinvokingfactorybean;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.security.core.context.securitycontextholder;
/**
* create by pengchao on 2018/3/7
*/
@configuration
public class auditorawareconfig {
@bean
public methodinvokingfactorybean methodinvokingfactorybean() {
methodinvokingfactorybean methodinvokingfactorybean = new methodinvokingfactorybean();
methodinvokingfactorybean.settargetclass(securitycontextholder.class);
methodinvokingfactorybean.settargetmethod("setstrategyname");
methodinvokingfactorybean.setarguments(new string[]{securitycontextholder.mode_inheritablethreadlocal});
return methodinvokingfactorybean;
}
}
securitycontextholder的主要功能是将当前执行的进程和securitycontext关联起来。securitycontextholder.mode_inheritablethreadlocal
:用于线程有父子关系的情景中,子线程继承父线程的securitycontextholder;securitycontextholder.mode_inheritablethreadlocal
:全局共用securitycontextholder。
源码地址:
相关推荐
主要介绍了基于spring data的auditoraware审计功能的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
spring data jpa api。 spring data jpa 开发文档。 欧洲杯足彩官网 spring data jpa api。
spring data mongodb api。 spring data mongodb 开发文档。
本次课程以springdata为中心,重点讲解了其jpa组件,扩展讲解了redis,mongdb,es组件,并且对部分组件做了必要的源码分析。而且在课程的最后部分加入了一个综合案例,可以将前面章节所学知识点应用到一个项目中,帮助...
基于springboot spring data jpa mybatis的仓库管理系统 基于springboot spring data jpa mybatis的仓库管理系统 基于springboot spring data jpa mybatis的仓库管理系统 基于springboot spring data jpa mybatis的...
1. 尚硅谷_springdata_概述 2. 尚硅谷_springdata_helloworld 3. 尚硅谷_springdata_repository接口 4. 尚硅谷_springdata_repository查询方法定义规范 5. 尚硅谷_springdata_query注解 6. 尚硅谷_springdata_...
1、基于springboot spring data jpa mybatis的仓库管理系统源码.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考...
spring-data-jest, jest的spring data 实现 spring data jest 基于on客户端的elasticsearch的spring data 实现仅在 http ( 例如aws上) 可以访问的情况下使用 spring data 和elasticsearch群集。
在线教育平台服务端基于spring boot构建,采用spring cloud微服务框架。 持久层:mysql、mongodb、redis、elasticsearch 数据访问层:使用spring data jpa 、mybatis、spring data mongodb等 业务层:spring ioc、...
'springdatajpa从入门到精通'以springboot为技术基础 从入门到精通 由浅入深地介绍springdatajpa的使用。有语法 有实践 有原理剖析。'springdatajpa从入门到精通'分为12章 内容包括整体认识jpa、jpa基础查询方法、...
采用目前主流的微服务系统架构 springboot springcloud springdata进行开发,前端技术采用vue.js 。系统整体分为 三大部分:微服务、网站前台、网站管理后台。功能模块包括文章、问答、招聘、活 动、吐槽、交友、...
spring data jpa中文文档1.4.3
1. the spring data project 2. repositories: convenient data access layers 3. type-safe querying using querydsl . . part ii. relational databases 4. jpa repositories 5. type-safe jdbc programming with ...
本文档详细介绍了spring data jpa的概念、spring data jpa能够做什么,services和 repositories的对比以及各种repositories的使用方法。
spring data mongodb中文文档 便宜下载了。
spring data 项目的目的是为了简化构建基于 spring 框架应用的数据访问计数,包括非关系数据库、map-reduce 框架、云数据服务等等;另外也包含对关系数据库的访问支持。spring data 包含多个子项目:commons - 提供...
(完整版)基于springcloud微服务系统设计方案.docx(完整版)基于springcloud微服务系统设计方案.docx(完整版)基于springcloud微服务系统设计方案.docx(完整版)基于springcloud微服务系统设计方案.docx(完整版)基于...
spring注解完整版 spring data jpa官方文档中文翻译 jpa2.0官方文档 文档内容齐全 值得参考学习
《spring data实战》介绍了spring data、repository、querydsl的基础理念,然后阐述了借助spring data如何简化nosql和大数据的访问,并且涵盖了使用spring roo和spring data rest导出功能如何实现应用的快速开发,除...
基于springboot springdatajpa mysql的课表排课及实验室机房管理系统