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

Posted 省长来了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Sa-Token 实现 [记住我] 模式登录七天免登录相关的知识,希望对你有一定的参考价值。

一、需求分析

如图所示,一般网站的登录界面都会有一个 [记住我] 按钮,当你勾选它登录后,即使你关闭浏览器再次打开网站,也依然会处于登录状态,无须重复验证密码:

本文将详细介绍在 Sa-Token中,如何做到以下登录模式:

  • 记住我登录:登录后关闭浏览器,再次打开网站登录状态依然有效,无需重复登录。
  • 仅本次有效登录:登录后关闭浏览器,再次打开网站登录状态将失效,需要再次登录。
  • 七天免登录:为登录状态设定一个详细的有效期,在这个期限内无需重复登录,过了期限后需要再次登录。

Sa-Token 是一个轻量级 java 权限认证框架,主要解决登录认证、权限认证、单点登录、OAuth2、微服务网关鉴权 等一系列权限相关问题。

首先在项目中引入 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 中实现记住我功能

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 便会消失,导致会话失效。

动态演示图:

四、前后端分离模式下如何实现[记住我]?

此时机智的你

以上是关于使用 Sa-Token 实现 [记住我] 模式登录七天免登录的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot 使用 Sa-Token 完成路由拦截鉴权

【SpringCloud-Alibaba系列教程】13.gateway网关结合Sa-token进行登录鉴权

SpringBoot 项目使用 Sa-Token 完成登录认证

Sa-token简单介绍和基本使用

Sa-Token

Sa-Token v1.20.0 发布,新增临时Token认证