最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年03月09日 12:33:02   作者:程序曉猿  
這篇文章主要介紹了Spring security實(shí)現(xiàn)記住我下次自動(dòng)登錄功能過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一、原理分析

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

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

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

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

<security:http auto-config="true" use-expressions="false">
    <!-- 配置鏈接地址,表示任意路徑都需要ROLE_USER權(quán)限,這里可以配置
     一個(gè)逗號(hào)隔開的角色列表-->
    <security:intercept-url pattern="/**" access="ROLE_USER"/>

    <!--自定義登錄頁(yè)面-->
    <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"指定前臺(tái)傳遞的是否rememberme的參數(shù)名,前臺(tái)要傳遞的參數(shù)值是true或false

(2)前臺(tái)登錄頁(yè)面上增加一個(gè)checkbox

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

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

(3)測(cè)試

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

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

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

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

(1)創(chuàng)建一張表用來(lái)持久化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"用來(lái)指定數(shù)據(jù)源,spring-security通過(guò)數(shù)據(jù)源來(lái)操作數(shù)據(jù)庫(kù)中的persistent_logins表

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

(3)測(cè)試

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


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

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

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

在congtroller層提供一個(gè)方法來(lái)進(jìn)行判斷

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

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

測(cè)試工程代碼的地址:工程示例

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • idea文件上有鎖文件只讀不可編輯的解決

    idea文件上有鎖文件只讀不可編輯的解決

    這篇文章主要介紹了idea文件上有鎖文件只讀不可編輯的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring啟動(dòng)指定時(shí)區(qū)的兩種方法

    Spring啟動(dòng)指定時(shí)區(qū)的兩種方法

    最近項(xiàng)目啟動(dòng),時(shí)間要修改成東七區(qū)時(shí)間,本文主要介紹了Spring啟動(dòng)指定時(shí)區(qū)的兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • 詳解Spring Security的formLogin登錄認(rèn)證模式

    詳解Spring Security的formLogin登錄認(rèn)證模式

    對(duì)于一個(gè)完整的應(yīng)用系統(tǒng),與登錄驗(yàn)證相關(guān)的頁(yè)面都是高度定制化的,非常美觀而且提供多種登錄方式。這就需要Spring Security支持我們自己定制登錄頁(yè)面,也就是本文給大家介紹的formLogin模式登錄認(rèn)證模式,感興趣的朋友跟隨小編一起看看吧
    2019-11-11
  • Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之單向鏈表

    Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之單向鏈表

    單向鏈表特點(diǎn)是鏈表的鏈接方向是單向的,訪問(wèn)要通過(guò)順序讀取從頭部開始。鏈表是使用指針構(gòu)造的列表,是由一個(gè)個(gè)結(jié)點(diǎn)組裝起來(lái)的,又稱為結(jié)點(diǎn)列表。其中每個(gè)結(jié)點(diǎn)都有指針成員變量指向列表中的下一個(gè)結(jié)點(diǎn),head指針指向第一個(gè)結(jié)點(diǎn)稱為表頭,而終止于最后一個(gè)指向nuLL的指針
    2022-02-02
  • Java map集合順序如何同步添加順序

    Java map集合順序如何同步添加順序

    這篇文章主要介紹了Java map集合順序如何同步添加順序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot整合Web之CORS支持與配置類和 XML配置及注冊(cè)攔截器

    SpringBoot整合Web之CORS支持與配置類和 XML配置及注冊(cè)攔截器

    這篇文章主要介紹了SpringBoot整合Web開發(fā)中CORS支持與配置類和 XML配置及注冊(cè)攔截器的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 利用SpringMVC和Ajax實(shí)現(xiàn)文件上傳功能

    利用SpringMVC和Ajax實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了利用SpringMVC和Ajax實(shí)現(xiàn)文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Spring?Data?Elasticsearch?5.0.x修改數(shù)據(jù)后無(wú)法立即刷新解決方法示例

    Spring?Data?Elasticsearch?5.0.x修改數(shù)據(jù)后無(wú)法立即刷新解決方法示例

    這篇文章主要為大家介紹了Spring?Data?Elasticsearch?5.0.x修改數(shù)據(jù)后無(wú)法立即刷新解決方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • java 中設(shè)計(jì)模式之單例

    java 中設(shè)計(jì)模式之單例

    這篇文章主要介紹了java 中設(shè)計(jì)模式之單例的相關(guān)資料,這里說(shuō)明惡漢模式與懶漢模式,需要的朋友可以參考下
    2017-08-08
  • MyBatis與Spring中的SqlSession詳解

    MyBatis與Spring中的SqlSession詳解

    在MyBatis中,你可以使用SqlSessionFactory來(lái)創(chuàng)建SqlSession,使用MyBatis-Spring之后,你不再需要直接使用SqlSessionFactory了,接下來(lái)通過(guò)示例代碼講解MyBatis與Spring中的SqlSession,需要的朋友可以參考下
    2024-05-05

最新評(píng)論

盖州市| 屏东市| 平陆县| 荥阳市| 崇文区| 尤溪县| 宜宾县| 确山县| 溧水县| 康定县| 武乡县| 新郑市| 固镇县| 镇雄县| 油尖旺区| 绵阳市| 昭苏县| 潢川县| 甘谷县| 柳林县| 肇州县| 郯城县| 枝江市| 鲁甸县| 临沭县| 怀安县| 庄河市| 凤城市| 渭源县| 郧西县| 大石桥市| 五河县| 和静县| 沙洋县| 万全县| 勃利县| 高密市| 佛教| 沙洋县| 九龙坡区| 苗栗县|