SpringSecurity rememberme功能實(shí)現(xiàn)過(guò)程解析
記住我功能原理分析
還記得前面咱們分析認(rèn)證流程時(shí),提到的記住我功能嗎?
現(xiàn)在繼續(xù)跟蹤找到AbstractRememberMeServices對(duì)象的loginSuccess方法:
再點(diǎn)進(jìn)去上面if判斷中的rememberMeRequested方法,還在當(dāng)前類中:
如果上面方法返回true,就表示頁(yè)面勾選了記住我選項(xiàng)了。
繼續(xù)順著調(diào)用的方法找到PersistentTokenBasedRememberMeServices的onLoginSuccess方法:
注意name和value屬性的值不要寫錯(cuò)哦!
先測(cè)試一下,認(rèn)證通過(guò)后,關(guān)掉瀏覽器,再次打開頁(yè)面,發(fā)現(xiàn)還要認(rèn)證!為什么沒(méi)有起作用呢?
這是因?yàn)閞emember me功能使用的過(guò)濾器RememberMeAuthenticationFilter默認(rèn)是不開啟的!
開啟remember me過(guò)濾器
<security:remember-me token-validity-seconds="60"></security:remember-me>
說(shuō)明:RememberMeAuthenticationFilter中功能非常簡(jiǎn)單,會(huì)在打開瀏覽器時(shí),自動(dòng)判斷是否認(rèn)證,如果沒(méi)有則
調(diào)用autoLogin進(jìn)行自動(dòng)認(rèn)證。
remember me 安全性分析
記住我功能方便是大家看得見的,但是安全性卻令人擔(dān)憂。因?yàn)?Cookie畢竟是保存在客戶端的,很容易盜取,而且
cookie的值還與用戶名、密碼這些敏感數(shù)據(jù)相關(guān),雖然加密了,但是將敏感信息存在客戶端,還是不太安全。那么
這就要提醒喜歡使用此功能的,用完網(wǎng)站要及時(shí)手動(dòng)退出登錄,清空認(rèn)證信息。
此外,SpringSecurity還提供了remember me的另一種相對(duì)更安全的實(shí)現(xiàn)機(jī)制 :在客戶端的cookie中,僅保存一個(gè)
無(wú)意義的加密串(與用戶名、密碼等敏感數(shù)據(jù)無(wú)關(guān)),然后在db中保存該加密串-用戶信息的對(duì)應(yīng)關(guān)系,自動(dòng)登錄
時(shí),用cookie中的加密串,到db中驗(yàn)證,如果通過(guò),自動(dòng)登錄才算通過(guò)。
持久化remember me信息
創(chuàng)建一張表,注意這張表的名稱和字段都是固定的,不要修改。
<security:remember-me token-validity-seconds="60" data-source-ref="dataSource" remember-me-parameter="remember-me"></security:remember-me>
CREATE TABLE `persistent_logins` ( `username` varchar(64) NOT NULL, `series` varchar(64) NOT NULL, `token` varchar(64) NOT NULL, `last_used` timestamp NOT NULL, PRIMARY KEY (`series`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Spring Security 構(gòu)建rest服務(wù)實(shí)現(xiàn)rememberme 記住我功能
- 詳解使用Spring Security進(jìn)行自動(dòng)登錄驗(yàn)證
- Spring Security實(shí)現(xiàn)兩周內(nèi)自動(dòng)登錄"記住我"功能
- spring security實(shí)現(xiàn)下次自動(dòng)登錄功能過(guò)程解析
- Spring Security 自動(dòng)踢掉前一個(gè)登錄用戶的實(shí)現(xiàn)代碼
- Spring security實(shí)現(xiàn)記住我下次自動(dòng)登錄功能過(guò)程詳解
- Spring Security學(xué)習(xí)之rememberMe自動(dòng)登錄的實(shí)現(xiàn)
相關(guān)文章
java編程之基于SpringBoot框架實(shí)現(xiàn)掃碼登錄
本文將介紹基于SpringBoot + Vue + Android實(shí)現(xiàn)的掃碼登錄demo的總體思路,文中附含詳細(xì)示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09Java中的CopyOnWriteArrayList原理詳解
這篇文章主要介紹了Java中的CopyOnWriteArrayList原理詳解,如源碼所示,CopyOnWriteArrayList和ArrayList一樣,都在內(nèi)部維護(hù)了一個(gè)數(shù)組,操作CopyOnWriteArrayList其實(shí)就是在操作內(nèi)部的數(shù)組,需要的朋友可以參考下2023-12-12Java實(shí)現(xiàn)Excel文件轉(zhuǎn)PDF(無(wú)水印無(wú)限制)
這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)Excel文件轉(zhuǎn)PDF的效果,并可以無(wú)水印、無(wú)限制。文中的示例代碼講解詳細(xì),需要的可以參考一下2022-06-06SpringBoot項(xiàng)目@Async方法問(wèn)題解決方案
這篇文章主要介紹了SpringBoot項(xiàng)目@Async方法問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Java中如何將?int[]?數(shù)組轉(zhuǎn)換為?ArrayList(list)
這篇文章主要介紹了Java中將?int[]?數(shù)組?轉(zhuǎn)換為?List(ArrayList),本文通過(guò)示例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12