你有沒有很迷茫的階段,感覺自己什么都不行什么都不會(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)吧。