第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

即使條件為假,Spring bean 也總是返回相同的值

即使條件為假,Spring bean 也總是返回相同的值

慕的地8271018 2023-06-14 14:29:41
我正在使用 spring data jpa 為我的實(shí)體填充審計(jì)數(shù)據(jù)。我們有一個(gè)每晚運(yùn)行的 quartz 作業(yè),它不會(huì)被驗(yàn)證,在這種情況下,我們希望“createdBy”值為“system”。在其他情況下,我們希望它填充當(dāng)前登錄的用戶。當(dāng)我通過(guò) UI 創(chuàng)建 Purcahse 訂單時(shí),“createdBy”字段始終填充有“system”,而不是當(dāng)前登錄的用戶 ID。我嘗試讓 AuditorAware bean 變得懶惰并將范圍更改為原型,但它們都不起作用。我在代碼中放置了一個(gè)斷點(diǎn),我可以看到 SecurityContext 和 Authentication 對(duì)象不為空,但它仍然返回“系統(tǒng)”@Entity@EntityListeners(AuditingEntityListener.class)public class Purchase{    String purchaseNbr;    @CreatedBy    private String createdBy;}@Configuration@EnableJpaAuditingpublic class Auditconfig{    @Bean    public AuditorAware<String> auditAware(){        if(SecurityContextHolder.getContext()==null || SecurityContextHolder.getContext.getAuthentication() == null ) {             //during spring context initialization, i can see this branch gets hit, if i put a breakpoint here             return () -> Optional.of("system");        }else {             //this branch never gets hit even when "if" condition is false during runtime             return () -> Optional.of(SecurityContextHolder.getContext().getAuthentication().getName());         }    }}預(yù)期“createdBy”是當(dāng)前用戶,但始終是“系統(tǒng)”
查看完整描述

1 回答

?
至尊寶的傳說(shuō)

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊

該方法auditAware()僅在啟動(dòng)時(shí)執(zhí)行一次。此時(shí),沒(méi)有當(dāng)前用戶。所以你總是回來(lái)


() -> Optional.of("system")

而這個(gè) AuditorAware 實(shí)例,無(wú)論何時(shí)被調(diào)用,都會(huì)因此總是返回


Optional.of("system")

您想要的是一個(gè) AuditAware,無(wú)論何時(shí)調(diào)用它,都會(huì)測(cè)試當(dāng)前用戶是誰(shuí),并確定它應(yīng)該返回什么。所以應(yīng)該是


@Bean

public AuditorAware<String> auditAware(){

    return () -> {

        if (SecurityContextHolder.getContext() == null || SecurityContextHolder.getContext.getAuthentication() == null) {

            return Optional.of("system");

        } else {

            return Optional.of(SecurityContextHolder.getContext().getAuthentication().getName());

        }

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-06-14
  • 1 回答
  • 0 關(guān)注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)