中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springboot~jpa審計字段的(de)自動填(tian)充

在使用 Spring Data JPA 中的 @CreatedDate 注解時,如果希望自動填充創建時間字段,通常需要結合 @EntityListeners(AuditingEntityListener.class) 注解一起使用。這是因為 @CreatedDate 等審(shen)計注解通常與審(shen)計事件(jian)監聽器(AuditingEntityListener)一(yi)起工(gong)作(zuo),用于(yu)處理(li)實體的審(shen)計信息。

審計字段-自動填充

當您定義一個實體類(例如 EntityBase)并希望使用 @CreatedDate 注解來自(zi)動設置創建時間時,可以(yi)按照(zhao)以(yi)下步驟操作:

  1. 在實體類中添加 @CreatedDate 注解,實體可抽象成一個類,如EntityBase,AuditBase等
@Getter
@Setter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class EntityBase {

	/**
	 * 創建人
	 */
	@Column(name = "created_by")
	@CreatedBy
	private String createdBy;

	/**
	 * 修改人
	 */
	@Column(name = "updated_by")
	@LastModifiedBy
	private String updatedBy;

	/**
	 * 創建時間
	 */
	@Column(name = "created_time")
	@CreatedDate
	private java.time.LocalDateTime createdTime;

	/**
	 * 更新時間
	 */
	@Column(name = "update_time")
	@LastModifiedDate
	private java.time.LocalDateTime updateTime;

}
  1. 確保審計事件監聽器生效
    確保 AuditingEntityListener 能(neng)夠正確(que)監聽實體類的審計(ji)事件,并(bing)在保存(cun)實體對象時(shi)自動填(tian)充相(xiang)應的審計(ji)信(xin)息,包(bao)括(kuo)創建時(shi)間等。

  2. 實現AuditorAware接口,返回當前登錄的用戶,以便填充create_by字段,同時開啟審計功能@EnableJpaAuditing:

@EnableJpaAuditing
@Component
public class AuditorAwareImpl implements AuditorAware {

	@Override
	public Optional getCurrentAuditor() {
		return Optional.of("lind");
	}

}

通過以上步驟,您可以在訂閱 EntityBase 實體類時使用 @CreatedDate 注解,并結合 @EntityListeners(AuditingEntityListener.class) 注解來自動填(tian)充創建(jian)時間(jian)字(zi)段,從而(er)實現審計功能。

AuditorAware獲取請求頭信息

要在實現 AuditorAware 接口的 getCurrentAuditor() 方法中獲取當前請求頭(HTTP Header)中的變量,您可以借助 Spring 提供的 RequestContextHolderServletRequestAttributes 來訪問當(dang)前(qian)請求的上下文信息。具體步驟如下:

  1. 獲取當前請求的 HttpServletRequest 對象

    • 首先,您需要從 RequestContextHolder.getRequestAttributes() 獲取當前請求的 ServletRequestAttributes 對象。
    • 然后通過 ServletRequestAttributes 對象獲取當前的 HttpServletRequest 對象。
  2. 從 HttpServletRequest 中獲取請求頭信息

    • HttpServletRequest 對象中,您可以使用 getHeader() 方法來獲取指定名稱的請求頭信息。

下面是一個示例代碼,演示了如何在 AuditorAwaregetCurrentAuditor() 方法中獲取當前(qian)請(qing)求頭中的變量:

import org.springframework.data.domain.AuditorAware;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Optional;

@EnableJpaAuditing
@Component
public class CustomAuditorAware implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (attributes != null) {
            HttpServletRequest request = attributes.getRequest();
            String customHeaderValue = request.getHeader("Custom-Header");
            return Optional.ofNullable(customHeaderValue);
        }
        return Optional.empty();
    }
}

如果是基于netty的WEB框架,需(xu)要(yao)使用下面代碼獲(huo)取請求頭參數

@EnableJpaAuditing
@Component
public class AuditorAwareImpl implements AuditorAware<String> {

	@Override
	public Optional<String> getCurrentAuditor() {
		Object request = RpcContext.getServiceContext().getRequest();
		if (request != null) {
			NettyRequestFacade requestFacade = (NettyRequestFacade) request;
			if (requestFacade != null && requestFacade.getHeader("preferred_username") != null) {
				return Optional.of(requestFacade.getHeader("preferred_username"));
			}
		}
		return Optional.of("none");
	}

}

在上述代碼中,我們通過 RequestContextHolder 獲取當前請求的上下文信息,并從中提取出請求頭中名為 Custom-Header 的(de)自定義變量值(zhi)。最后(hou)將該(gai)值(zhi)作為審計人員信息返(fan)回。

請注意,在使用 RequestContextHolder 時,確(que)保上(shang)下(xia)文中包(bao)含請求信息,否則(ze)可能會(hui)出現空(kong)指(zhi)針異(yi)常。另外,這種方式適用于(yu)基于(yu) Spring MVC 或(huo) Spring WebFlux 的應用。

posted @ 2024-05-30 13:44  張占嶺  閱讀(544)  評論(2)    收藏  舉報