利用SpringDataJPA開啟審計功能,自動保存操作人操作時間_第1頁
利用SpringDataJPA開啟審計功能,自動保存操作人操作時間_第2頁
利用SpringDataJPA開啟審計功能,自動保存操作人操作時間_第3頁
利用SpringDataJPA開啟審計功能,自動保存操作人操作時間_第4頁
利用SpringDataJPA開啟審計功能,自動保存操作人操作時間_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第利用SpringDataJPA開啟審計功能,自動保存操作人操作時間目錄1相關注解實現自動記錄上述信息主要有5個注解2實現過程2.1依賴引用2.2實體類標記審計屬性2.3審計自定義操作2.4應用開啟審計功能2.5實體操作有些業務數據對數據的創建、最后更新時間以及創建、最后操作人進行記錄。如果使用SpringDataJpa做數據新增或更新,可實現自動保存這些信息而不需要顯示設置對應字段的值,可通過以下步驟進行配置。

1相關注解

實現自動記錄上述信息主要有5個注解

@EnableJpaAuditing:審計功能開關

@CreatedBy:標記數據創建者屬性

@LastModifiedBy:標記數據最近一次修改者屬性

@CreatedDate:標記數據創建日期屬性

@LastModifiedDate:標記數據最近一次修改日期屬性

2實現過程

2.1依賴引用

使用SpringDataJPA要引用依賴spring-boot-starter-data-jpa,gradle引用方式如下

implementation'org.springframework.boot:spring-boot-starter-data-jpa'

2.2實體類標記審計屬性

案例使用User實體演示過程,需要在實體對應的字段上添加對應的注解表示是審計屬性,另外需要在實體類上開啟審計監聽,如下:

@Entity

@Table(name="h_user")

@EntityListeners({AuditingEntityListener.class})//開啟審計監聽

publicclassUser{

@GeneratedValue(strategy=GenerationType.IDENTITY)

privateIntegerid;

//保存創建人的字段

@CreatedBy

@Column(name="created_by")

privateStringcreatedBy;

//保存最近修改人的字段

@LastModifiedBy

@Column(name="last_modified_by")

privateStringlastModifiedBy;

//保存創建時間的字段

@CreatedDate

@Column(name="created_date")

//保存最近修改日期的字段

privateDatecreatedDate;

@LastModifiedDate

@Column(name="last_modified_date")

privateDatelastModifiedDate;

privateStringrealName;

privateStringusername;

privateStringmobile;

privateStringemail;

privateStringpassword;

privateIntegerflag;

publicIntegergetId(){

returnid;

publicvoidsetId(Integerid){

this.id=id;

publicStringgetCreatedBy(){

returncreatedBy;

publicvoidsetCreatedBy(StringcreatedBy){

this.createdBy=createdBy;

publicStringgetLastModifiedBy(){

returnlastModifiedBy;

publicvoidsetLastModifiedBy(StringlastModifiedBy){

this.lastModifiedBy=lastModifiedBy;

publicDategetCreatedDate(){

returncreatedDate;

publicvoidsetCreatedDate(DatecreatedDate){

this.createdDate=createdDate;

publicDategetLastModifiedDate(){

returnlastModifiedDate;

publicvoidsetLastModifiedDate(DatelastModifiedDate){

this.lastModifiedDate=lastModifiedDate;

publicStringgetRealName(){

returnthis.realName;

publicvoidsetRealName(StringrealName){

this.realName=realName;

publicStringgetUsername(){

returnusername;

publicvoidsetUsername(Stringusername){

this.username=username;

publicStringgetMobile(){

returnmobile;

publicvoidsetMobile(Stringmobile){

this.mobile=mobile;

publicStringgetEmail(){

returnemail;

publicvoidsetEmail(Stringemail){

this.email=email;

@JsonIgnore

publicStringgetPassword(){

returnpassword;

publicvoidsetPassword(Stringpassword){

this.password=password;

publicIntegergetFlag(){

returnflag;

publicvoidsetFlag(Integerflag){

this.flag=flag;

上述User實體對應數據表定義如下:

createtableh_user

idintauto_incrementprimarykey,

usernamevarchar(30)default''notnullcomment'登錄用戶名',

real_namevarchar(30)default''nullcomment'真實姓名',

mobilevarchar(25)default''nullcomment'手機號碼',

emailvarchar(30)default''nullcomment'郵箱',

passwordvarchar(100)default''nullcomment'加密密碼',

flagintdefault'0'nullcomment'用戶標記',

created_byvarchar(50)default'HSystem'nullcomment'創建人',

created_datedatetimedefaultCURRENT_TIMESTAMPnotnull,

last_modified_byvarchar(30)default'HSystem'nullcomment'修改人',

last_modified_datedatetimedefaultCURRENT_TIMESTAMPnotnull,

constraintuser_username_uindexunique(username)

engine=InnoDB;

2.3審計自定義操作

當對實體有新增或保存操作時,系統會自動獲取操作時的系統時間作為創建時間和修改時間。

對于創建者或最后修改這,審計過程會獲取當前登錄系統的用戶信息,當未登錄的情況下,需要指定默認操作,可通過實現AuditorAware類來實現。

下面代碼在未獲取到用戶信息時返回HSystem表示默認為系統操作。

@Configuration

publicclassSpringSecurityAuditorAwareimplementsAuditorAwareString{

finalLoggerlogger=LoggerFactory.getLogger(this.getClass());

@Override

publicOptionalStringgetCurrentAuditor(){

try{

Authenticationauthentication=SecurityContextHolder.getContext().getAuthentication();

if(authenticationinstanceofAnonymousAuthenticationToken){

returnOptional.of("HSystem");

}else{

if(authentication==null){

returnOptional.of("HSystem");

Useruser=(User)authentication.getPrincipal();

returnOptional.of(user.getUsername());

}catch(Exceptionex){

logger.error("getuserAuthenticationfailed:"+ex.getMessage(),ex);

returnOptional.of("HSystem");

2.4應用開啟審計功能

在應用程序入口類添加注解@EnableJpaAuditing開啟審計功能,如下

@SpringBootApplication

//啟用JPA審計功能,自動填充@CreateDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy注解的字段

@EnableJpaAuditing(auditorAwareRef="springSecurityAuditorAware")

publicclassHBackendApplication{

publicstaticvoidmain(String[]args){

SpringApplication.run(HBackendApplication.class,args);

}

注意:如果系統中有多個審計實現,需要指定Bean的名稱,上面案例中使用名稱為springSecurityAuditorAware的bean。

2.5實體操作

定義User實體類的JPA操作接口UserRepository如下

@Repository

publicinterfaceUserRepositoryextendsPagingAndSortingRepositoryUser,Integer,JpaRepositoryUser,Integer{

}

例如創建用戶時代碼如下,不需要顯示設置上面提到的4個屬性

Useruser=newUser();

user.setUsername(username.trim());

user.setPassword(t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論