1. 需求: 系統(tǒng)存在兩種類型的用戶, 存儲(chǔ)在不同的表中, 需要用不同的鑒權(quán)邏輯
2. 異常原因:?
根本原因是注冊(cè)了兩個(gè)UserDetailsService, 當(dāng)InitializeUserDetailsManagerConfigurer執(zhí)行configure的時(shí)候, 會(huì)去spring容器中獲取UserDetailsService, 當(dāng)獲取到的實(shí)例數(shù)量>1時(shí), 返回null, 進(jìn)而導(dǎo)致AuthenticationManagerBuilder沒(méi)有將DaoAuthenticationProvider注冊(cè)進(jìn)去, 會(huì)生成ProviderManager代理類, 然后將這個(gè)代理類設(shè)置為下一個(gè)ProviderManager的parent, 當(dāng)獲取token時(shí),?ProviderManager.authenticate使用本類的AuthenticationProvider認(rèn)證失敗后, 會(huì)調(diào)用parent進(jìn)行認(rèn)證, 然而parent是同類型的代理類, 實(shí)際上執(zhí)行的還是當(dāng)前類, 無(wú)限遞歸, 最終 StackOverflow
感覺(jué)這塊作者設(shè)計(jì)的不合理, 獲取到多個(gè)UserDetailsService的時(shí)候應(yīng)該拋出異常, 不應(yīng)該返回null