小猿圈Java開發(fā)之如何使用Spring Security手動(dòng)驗(yàn)證用戶方法示例

你有沒有很迷茫的階段,感覺自己什么都不行什么都不會(huì),人生沒有方向,沒有目標(biāo),不知道下一步該往哪里走,下面給小猿圈Java講師給你分享一些如何使用Spring Security手動(dòng)驗(yàn)證用戶方法示例,希望對(duì)你有所幫助。

SpringSecurity,簡(jiǎn)而言之SpringSecurity在ThreadLocal中保存每個(gè)經(jīng)過身份驗(yàn)證的用戶的主要信息-保存的是Authentication對(duì)象。

為了構(gòu)造和設(shè)置此Authentication對(duì)象,通常我們需要使用SpringSecurity在標(biāo)準(zhǔn)身份驗(yàn)證上構(gòu)建對(duì)象的相同方法。

要讓我們手動(dòng)觸發(fā)身份驗(yàn)證,然后將生成的身份驗(yàn)證對(duì)象設(shè)置為框架用來保存當(dāng)前登錄用戶的當(dāng)前SecurityContext:

UsernamePasswordAuthenticationToken authReq

= new UsernamePasswordAuthenticationToken(user, pass);

Authentication auth = authManager.authenticate(authReq);

SecurityContext sc = SecurityContextHolder.getContext();

securityContext.setAuthentication(auth);

在上下文中設(shè)置身份驗(yàn)證后,我們現(xiàn)在可以使用securityContext.getAuthentication()。isAuthenticated()檢查當(dāng)前用戶是否經(jīng)過身份驗(yàn)證。

SpringMVC,默認(rèn)情況下SpringSecurity在SpringSecurity過濾器鏈中添加了一個(gè)額外的過濾器。它能夠持久化Security上下文(SecurityContextPersistenceFilter類)。

反過來,它將Security上下文的持久性委托給SecurityContextRepository的實(shí)例,默認(rèn)為HttpSessionSecurityContextRepository類。

因此,為了在請(qǐng)求上設(shè)置身份驗(yàn)證并因此使其可用于來自客戶端的所有后續(xù)請(qǐng)求,我們需要在HTTP會(huì)話中手動(dòng)設(shè)置包含身份驗(yàn)證的SecurityContext:

public void login(HttpServletRequest req, String user, String pass) {

? UsernamePasswordAuthenticationToken authReq

? = new UsernamePasswordAuthenticationToken(user, pass);

? Authentication auth = authManager.authenticate(authReq);


? SecurityContext sc = SecurityContextHolder.getContext();

? sc.setAuthentication(auth);

? HttpSession session = req.getSession(true);

? session.setAttribute(SPRING_SECURITY_CONTEXT_KEY, sc);

}

SPRING_SECURITY_CONTEXT_KEY是靜態(tài)導(dǎo)入的HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY。

應(yīng)該注意的是,我們不能直接使用HttpSessionSecurityContextRepository-因?yàn)樗cSecurityContextPersistenceFilter一起使用。

這是因?yàn)檫^濾器使用存儲(chǔ)庫來加載和存儲(chǔ)Security上下文在前,在鏈中執(zhí)行其余已定義的過濾器在后,但是它在傳遞給鏈的響應(yīng)上使用自定義包裝器。。

因此,在這種情況下,您應(yīng)該知道所使用的包裝器的類類型,并將其傳遞給存儲(chǔ)庫中的相應(yīng)save方法。

在這個(gè)快速教程中,我們討論了如何在SpringSecurity上下文中手動(dòng)設(shè)置用戶身份驗(yàn)證以及如何使其可用于SpringMVC的目標(biāo)。專注于代碼示例,說明實(shí)現(xiàn)它的最簡(jiǎn)單方法。

以上就是小猿圈給大家分享的如何使用Spring Security手動(dòng)驗(yàn)證用戶方法示例,希望對(duì)小伙伴們有所幫助,想要了解更多內(nèi)容的小伙伴可以登錄小猿圈。還有與時(shí)俱進(jìn)的Java課程體系和Java視頻教程供大家學(xué)習(xí),想要學(xué)好Java開發(fā)技術(shù)的小伙伴快快行動(dòng)吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容