色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Spring security實(shí)現(xiàn)記住我下次自動登錄功能過程詳解

瀏覽:68日期:2023-09-17 14:22:37

一、原理分析

第一次登陸時,如果用戶勾選了readme選項(xiàng),登陸成功后springsecurity會生成一個cookie返回給瀏覽器端,瀏覽器下次訪問時如果攜帶了這個cookie,springsecurity就會放行這次訪問。

二、實(shí)現(xiàn)方式

2.1 簡單實(shí)現(xiàn)方式

(1) 在springsecurity的配置文件中,http節(jié)點(diǎn)下增加一個remember-me配置

<security:http auto-config='true' use-expressions='false'> <!-- 配置鏈接地址,表示任意路徑都需要ROLE_USER權(quán)限,這里可以配置 一個逗號隔開的角色列表--> <security:intercept-url pattern='/**' access='ROLE_USER'/> <!--自定義登錄頁面--> <security:form-login login-page='/login.html' login-processing-url='/login' username-parameter='username' password-parameter='password' authentication-failure-forward-url='/failed.html' default-target-url='/index.html' /> <!--關(guān)閉csrf,默認(rèn)是開啟的--> <security:csrf disabled='true'/> <security:remember-me remember-me-parameter='remembermeParamater' /> <!-- 退出 --> <security:logout invalidate-session='true' logout-url='/logout.do' logout-success-url='/login.html'/> </security:http>

其中remember-me-parameter='remembermeParamater'指定前臺傳遞的是否rememberme的參數(shù)名,前臺要傳遞的參數(shù)值是true或false

(2)前臺登錄頁面上增加一個checkbox

<form action='/login' method='post'> 用戶名:<input type='text' name='username' placeholder='請輸入用戶名'><br> 密 碼:<input type='password' name='password' placeholder='請輸入密碼'><br> 記住我:<input type='checkbox' name='remembermeParamater' value='true'> <input type='submit' value='登錄'> </form>

checkbox的name屬性要和上邊配置文件中的remember-me-parameter='remembermeParamater'保持一致。

(3)測試

啟動工程,進(jìn)行登錄,登錄成功后觀察cookie,會發(fā)現(xiàn)服務(wù)器端返回了一個名為remember-me的cookie

Spring security實(shí)現(xiàn)記住我下次自動登錄功能過程詳解

現(xiàn)在關(guān)閉瀏覽器,再次打開并訪問,只要不清除cookie就可以直接訪問資源,不需要重新登錄。

這種方式有個弊端,瀏覽器端要攜帶的這個cookie值服務(wù)端是存放在內(nèi)存中的,并沒有進(jìn)行持久化,所以如果服務(wù)重啟后服務(wù)器端存儲的這個值就會丟失,瀏覽器端的rememberme就會失效。為了解決這個問題就需要將服務(wù)器端生成的這個cookie值持久化到數(shù)據(jù)庫中。

2.2 數(shù)據(jù)庫實(shí)現(xiàn)方式

(1)創(chuàng)建一張表用來持久化rememberme的記錄

-- 創(chuàng)建記錄rememberme記錄的表CREATE TABLE persistent_logins( username VARCHAR(64), series VARCHAR(64), token VARCHAR(64), last_used DATE );

(2)將spring-security 配置文件中的rememberme標(biāo)簽的內(nèi)容改為如下內(nèi)容

<security:remember-me remember-me-parameter='remembermeParamater' data-source-ref='dataSource' token-validity-seconds='86400'/>

data-source-ref='dataSource'用來指定數(shù)據(jù)源,spring-security通過數(shù)據(jù)源來操作數(shù)據(jù)庫中的persistent_logins表

token-validity-seconds表示rememberme的有效時間,以秒為單位,這里的86400=24*3600表示一天

(3)測試

啟動工程,進(jìn)行登錄,登錄成功后會在persistent_logins表中生成一條記錄,

Spring security實(shí)現(xiàn)記住我下次自動登錄功能過程詳解

關(guān)閉瀏覽器再次訪問時會根據(jù)瀏覽器中攜帶的cookie值來查找數(shù)據(jù)庫中的這條記錄,如果查詢到了就認(rèn)證通過

三、區(qū)分是密碼登錄還是rememberme登錄

在用戶進(jìn)行一些敏感操作時,需要區(qū)分是否是rememberme登錄,如果是需要讓用戶跳轉(zhuǎn)到登錄頁面。

在congtroller層提供一個方法來進(jìn)行判斷

@GetMapping('/isRemembermeUser')public boolean isRemembermeUser(){ Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if(authentication==null){ return false; } //判斷當(dāng)前用戶是否是通過rememberme登錄,是返回true,否返回false return RememberMeAuthenticationToken.class.isAssignableFrom(authentication.getClass());}

先使用密碼登錄,訪問http://localhost/user/isRemembermeUser.do,后臺接口返回false,再關(guān)閉瀏覽器再次訪問這個地址,后臺接口返回true,表示這次是使用rememberme進(jìn)行的認(rèn)證。

測試工程代碼的地址:工程示例

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 久久精品国产免费看久久精品 | 能直接看的一级欧美毛片 | 中文国产成人精品久久一 | 神马最新午夜限制片 | 99久久精品国产一区二区成人 | 天天亚洲 | 农村寡妇特一级毛片 | 黄色网址网站在线观看 | 久久国产经典视频 | 免费人成在观看 | 午夜黄色福利视频 | 日韩国产成人资源精品视频 | m男亚洲一区中文字幕 | 米奇777色狠狠8888影视 | 天堂视频免费看 | 国产一区国产二区国产三区 | 欧美a大片 | 久久久久琪琪去精品色村长 | 久久手机视频 | 国产精品色内内在线播放 | 欧美一区二区三区久久久人妖 | 最近中文字幕在线 | 中文 | 亚洲国产天堂久久九九九 | 99精品在线播放 | 精产网红自拍在线 | 国产成人精品女人不卡在线 | 日本精品高清一区二区不卡 | 日韩一级片免费在线观看 | 国产精品久久久久久久久免费 | 日韩成人毛片高清视频免费看 | 狠狠色噜狠狠狠狠色综合久 | 欧美在线一级视频 | 99视频精品全部在线播放 | 国产精品不卡无毒在线观看 | 国产欧美一区二区三区沐欲 | 伊大人香蕉久久网欧美 | 免费一区二区三区在线视频 | 97国内免费久久久久久久久久 | 国产日本韩国不卡在线视频 | 久久久日本久久久久123 | 欧美日韩精品一区二区三区视频播放 |