美食家大橙子 发表于 2023-6-19 03:37:51

使用 Sa-Token 实现 [记住我] 模式登录、七天免登录

一、需求分析

如图所示,一般网站的登录界面都会有一个 [记住我] 按钮,当你勾选它登录后,即使你关闭浏览器再次打开网站,也依然会处于登录状态,无须重复验证密码:
https://oss.dev33.cn/sa-token/doc/login-view.png
本文将详细介绍在 Sa-Token中,如何做到以下登录模式:

[*]记住我登录:登录后关闭浏览器,再次打开网站登录状态依然有效,无需重复登录。
[*]仅本次有效登录:登录后关闭浏览器,再次打开网站登录状态将失效,需要再次登录。
[*]七天免登录:为登录状态设定一个详细的有效期,在这个期限内无需重复登录,过了期限后需要再次登录。
Sa-Token 是一个轻量级 java 权限认证框架,主要解决登录认证、权限认证、单点登录、OAuth2、微服务网关鉴权 等一系列权限相关问题。
首先在项目中引入 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 中实现记住我功能

Sa-Token的登录授权,默认就是[记住我]模式,为了实现[非记住我]模式,你需要在登录时如下设置:
// 设置登录账号id为10001,第二个参数指定是否为[记住我],当此值为false后,关闭浏览器后再次打开需要重新登录
StpUtil.login(10001, false);那么,Sa-Token实现[记住我]的具体原理是?
三、实现原理

Cookie作为浏览器提供的默认会话跟踪机制,其生命周期有两种形式,分别是:

[*]临时Cookie:有效期为本次会话,只要关闭浏览器窗口,Cookie就会消失。
[*]持久Cookie:有效期为一个具体的时间,在时间未到期之前,即使用户关闭了浏览器Cookie也不会消失。
利用Cookie的此特性,我们便可以轻松实现 [记住我] 模式:

[*]勾选 [记住我] 按钮时:调用StpUtil.login(10001, true),在浏览器写入一个持久Cookie储存 Token,此时用户即使重启浏览器 Token 依然有效。
[*]不勾选 [记住我] 按钮时:调用StpUtil.login(10001, false),在浏览器写入一个临时Cookie储存 Token,此时用户在重启浏览器后 Token 便会消失,导致会话失效。
动态演示图:
https://oss.dev33.cn/sa-token/doc/g/g3--remember-me.gif
四、前后端分离模式下如何实现[记住我]?


此时机智的你
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 使用 Sa-Token 实现 [记住我] 模式登录、七天免登录