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

Sa-Token記住我模式實現(xiàn)七天免登錄

 更新時間:2023年07月18日 10:48:56   作者:省長[機智]  
這篇文章主要為大家介紹了Sa-Token記住我模式實現(xiàn)七天免登錄示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

一、需求分析

如圖所示,一般網(wǎng)站的登錄界面都會有一個 [記住我] 按鈕,當你勾選它登錄后,即使你關閉瀏覽器再次打開網(wǎng)站,也依然會處于登錄狀態(tài),無須重復驗證密碼:

本文將詳細介紹在 Sa-Token中,如何做到以下登錄模式:

  • 記住我登錄:登錄后關閉瀏覽器,再次打開網(wǎng)站登錄狀態(tài)依然有效,無需重復登錄。
  • 僅本次有效登錄:登錄后關閉瀏覽器,再次打開網(wǎng)站登錄狀態(tài)將失效,需要再次登錄。
  • 七天免登錄:為登錄狀態(tài)設定一個詳細的有效期,在這個期限內無需重復登錄,過了期限后需要再次登錄。

Sa-Token 是一個輕量級 java 權限認證框架,主要解決登錄認證、權限認證、單點登錄、OAuth2、微服務網(wǎng)關鑒權 等一系列權限相關問題。

Gitee 開源地址:https://gitee.com/dromara/sa-token

首先在項目中引入 Sa-Token 依賴:

<!-- Sa-Token 權限認證 -->
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.34.0</version>
</dependency>

注:如果你使用的是 SpringBoot 3.x,只需要將 sa-token-spring-boot-starter 修改為 sa-token-spring-boot3-starter 即可。

二、在 Sa-Token 中實現(xiàn)記住我功能

Sa-Token的登錄授權,默認就是[記住我]模式,為了實現(xiàn)[非記住我]模式,你需要在登錄時如下設置:

// 設置登錄賬號id為10001,第二個參數(shù)指定是否為[記住我],當此值為false后,關閉瀏覽器后再次打開需要重新登錄
StpUtil.login(10001, false);

那么,Sa-Token實現(xiàn)[記住我]的具體原理是?

三、實現(xiàn)原理

Cookie作為瀏覽器提供的默認會話跟蹤機制,其生命周期有兩種形式,分別是:

  • 臨時Cookie:有效期為本次會話,只要關閉瀏覽器窗口,Cookie就會消失。
  • 持久Cookie:有效期為一個具體的時間,在時間未到期之前,即使用戶關閉了瀏覽器Cookie也不會消失。

利用Cookie的此特性,我們便可以輕松實現(xiàn) [記住我] 模式:

  • 勾選 [記住我] 按鈕時:調用StpUtil.login(10001, true),在瀏覽器寫入一個持久Cookie儲存 Token,此時用戶即使重啟瀏覽器 Token 依然有效。
  • 不勾選 [記住我] 按鈕時:調用StpUtil.login(10001, false),在瀏覽器寫入一個臨時Cookie儲存 Token,此時用戶在重啟瀏覽器后 Token 便會消失,導致會話失效。

動態(tài)演示圖:

記住我登錄

四、前后端分離模式下如何實現(xiàn)[記住我]?

此時機智的你??很快發(fā)現(xiàn)一個問題,Cookie雖好,卻無法在前后端分離環(huán)境下使用,那是不是代表上述方案在APP、小程序等環(huán)境中無效?

準確的講,答案是肯定的,任何基于Cookie的認證方案在前后端分離環(huán)境下都會失效(原因在于這些客戶端默認沒有實現(xiàn)Cookie功能),不過好在,這些客戶端一般都提供了替代方案,
唯一遺憾的是,此場景中token的生命周期需要我們在前端手動控制:

以經(jīng)典跨端框架 uni-app 為例,我們可以使用如下方式達到同樣的效果:

// 使用本地存儲保存token,達到 [持久Cookie] 的效果
uni.setStorageSync("satoken", "xxxx-xxxx-xxxx-xxxx-xxx");
// 使用globalData保存token,達到 [臨時Cookie] 的效果
getApp().globalData.satoken = "xxxx-xxxx-xxxx-xxxx-xxx";

如果你決定在PC瀏覽器環(huán)境下進行前后端分離模式開發(fā),那么更加簡單:

// 使用 localStorage 保存token,達到 [持久Cookie] 的效果
localStorage.setItem("satoken", "xxxx-xxxx-xxxx-xxxx-xxx");
// 使用 sessionStorage 保存token,達到 [臨時Cookie] 的效果
sessionStorage.setItem("satoken", "xxxx-xxxx-xxxx-xxxx-xxx");

Remember me, it's too easy!

五、登錄時指定 Token 有效期

登錄時不僅可以指定是否為[記住我]模式,還可以指定一個特定的時間作為 Token 有效時長,如下示例:

// 示例1:
// 指定token有效期(單位: 秒),如下所示token七天有效
StpUtil.login(10001, new SaLoginModel().setTimeout(60 * 60 * 24 * 7));
// ----------------------- 示例2:所有參數(shù)
// `SaLoginModel`為登錄參數(shù)Model,其有諸多參數(shù)決定登錄時的各種邏輯,例如:
StpUtil.login(10001, new SaLoginModel()
            .setDevice("PC")                 // 此次登錄的客戶端設備類型, 用于[同端互斥登錄]時指定此次登錄的設備類型
            .setIsLastingCookie(true)        // 是否為持久Cookie(臨時Cookie在瀏覽器關閉時會自動刪除,持久Cookie在重新打開后依然存在)
            .setTimeout(60 * 60 * 24 * 7)    // 指定此次登錄token的有效期, 單位:秒 (如未指定,自動取全局配置的 timeout 值)
            .setToken("xxxx-xxxx-xxxx-xxxx") // 預定此次登錄的生成的Token 
            .setIsWriteHeader(false)         // 是否在登錄后將 Token 寫入到響應頭
            );

注:如果在登錄時未指定 new SaLoginModel().setTimeout(604800) 那么框架將采用全局配置的 sa-token.timeout 值作為 Token 的有效期。

六、不同登錄策略的代碼對比

以下是三種登錄策略的代碼差異:

package com.pj.cases.up;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
/**
 * Sa-Token 記住我模式登錄 
 * 
 * @author kong
 * @since 2022-10-17 
 */
@RestController
@RequestMapping("/RememberMe/")
public class RememberMeController {
    // 記住我登錄    ---- http://localhost:8081/RememberMe/doLogin?name=zhang&pwd=123456
    @RequestMapping("doLogin")
    public SaResult doLogin(String name, String pwd) {
        if("zhang".equals(name) && "123456".equals(pwd)) {
            StpUtil.login(10001, true);
            return SaResult.ok("登錄成功");
        }
        return SaResult.error("登錄失敗");
    }
    // 不記住我登錄    ---- http://localhost:8081/RememberMe/doLogin2?name=zhang&pwd=123456
    @RequestMapping("doLogin2")
    public SaResult doLogin2(String name, String pwd) {
        if("zhang".equals(name) && "123456".equals(pwd)) {
            StpUtil.login(10001, false);
            return SaResult.ok("登錄成功");
        }
        return SaResult.error("登錄失敗");
    }
    // 七天免登錄    ---- http://localhost:8081/RememberMe/doLogin3?name=zhang&pwd=123456
    @RequestMapping("doLogin3")
    public SaResult doLogin3(String name, String pwd) {
        if("zhang".equals(name) && "123456".equals(pwd)) {
            StpUtil.login(10001, 60 * 60 * 24 * 7);
            return SaResult.ok("登錄成功");
        }
        return SaResult.error("登錄失敗");
    }
}

可依次訪問注釋中提供的測試鏈接,觀察不同登錄策略帶來的會話有效期差異。

參考資料

以上就是Sa-Token記住我模式實現(xiàn)七天免登錄的詳細內容,更多關于Sa-Token七天免登錄的資料請關注腳本之家其它相關文章!

相關文章

  • Spring Data的Domain Event的用法詳解

    Spring Data的Domain Event的用法詳解

    這篇文章主要介紹了Spring Data的Domain Event的用法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • java同步開篇入門簡單介紹

    java同步開篇入門簡單介紹

    java中的CountDownLatch、Semaphore、CyclicBarrier這些類又不屬于鎖,它們和鎖又有很多共同點,都是為了協(xié)同多線程的執(zhí)行,都是一種同步器,所以這里就借用同步來取名字了,也就是“同步系列”的來源。下面小編來簡單介紹下
    2019-05-05
  • spring?boot集成smart-doc自動生成接口文檔詳解

    spring?boot集成smart-doc自動生成接口文檔詳解

    這篇文章主要介紹了spring?boot集成smart-doc自動生成接口文檔詳解,smart-doc是一款同時支持java?restful?api和Apache?Dubbo?rpc接口文檔生成的工具,smart-doc顛覆了傳統(tǒng)類似swagger這種大量采用注解侵入來生成文檔的實現(xiàn)方法
    2022-09-09
  • java針對電話號碼正則匹配實例

    java針對電話號碼正則匹配實例

    這篇文章主要介紹了java針對電話號碼正則匹配的方法,涉及java正則匹配與字符串操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 詳解Java的Hibernat框架中的Map映射與SortedMap映射

    詳解Java的Hibernat框架中的Map映射與SortedMap映射

    這篇文章主要介紹了Java的Hibernat框架中的Map映射與SortedMap映射,Hibernat是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • springcloud結合bytetcc實現(xiàn)數(shù)據(jù)強一致性原理解析

    springcloud結合bytetcc實現(xiàn)數(shù)據(jù)強一致性原理解析

    這篇文章主要介紹了springcloud結合bytetcc實現(xiàn)數(shù)據(jù)強一致性原理解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Java 在PDF中添加頁面跳轉按鈕功能(代碼演示)

    Java 在PDF中添加頁面跳轉按鈕功能(代碼演示)

    這篇文章主要介紹了Java 在PDF中添加頁面跳轉按鈕功能,本文給大家提供了多種功能的按鈕,需要的朋友可以參考下
    2019-11-11
  • Java數(shù)據(jù)結構之稀疏數(shù)組的實現(xiàn)與應用

    Java數(shù)據(jù)結構之稀疏數(shù)組的實現(xiàn)與應用

    這篇文章主要為大家詳細介紹了Java數(shù)據(jù)結構中稀疏數(shù)組的實現(xiàn)與應用,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的可以了解一下
    2022-10-10
  • 解決idea2020.1找不到程序包和符號的問題

    解決idea2020.1找不到程序包和符號的問題

    這篇文章主要介紹了解決idea2020.1找不到程序包和符號的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • NameNode?重啟恢復數(shù)據(jù)的流程詳解

    NameNode?重啟恢復數(shù)據(jù)的流程詳解

    這篇文章主要為大家介紹了NameNode?重啟恢復數(shù)據(jù)的流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論

潜江市| 科技| 利津县| 定结县| 吴堡县| 通化县| 榆中县| 万全县| 蒙自县| 拉孜县| 游戏| 玉田县| 出国| 从江县| 汶上县| 徐闻县| 安图县| 交城县| 株洲县| 邯郸市| 三亚市| 敖汉旗| 灵丘县| 桂林市| 黑河市| 定襄县| 扎兰屯市| 宣城市| 泸溪县| 库车县| 离岛区| 上犹县| 抚顺市| 成安县| 合肥市| 北宁市| 金华市| 黄大仙区| 呼玛县| 河池市| 桂林市|