RememberMe简介及用法

本文涉及的产品
PolarDB Agent Express,2核4GB
RDS AI 助手,专业版
云数据库 PolarDB MySQL 版,列存表分析加速 4核8GB
简介: RememberMe功能通过令牌保持用户登录状态,避免重复登录。其原理是在用户勾选后下发remember-me Cookie,后续请求凭此令牌验证身份。但默认实现存在安全风险,令牌泄露可导致非法访问。可通过持久化Token至数据库并增加二次校验提升安全性,保障系统稳定与用户数据安全。(238字)

1.基本简介
RememberMe功能十分常见,如下图的QQ邮箱登录时的“记住我”的功能选项。

这里读者朋友们可能会有一个常见误区,“记住我”就是把用户的用户名/密码使用Cookie保存在浏览器,下次登录时不用再次输入,这个理解是非常不对的。
我们这里所说的RememberMe是一种服务器端的行为。传统的登录方式基于Session会话,一旦用户关闭浏览器重新打开,就要重新登录,这样太过于烦琐,如果有一种机制可以让用户关闭并重新打开浏览器之后,还能保持登录状态就会方便很多,这种实现之一就是RememberMe。
其大概实现如下面的流程所示,但是读者可能也发现这种将用户密码保存在浏览器的行为存在安全隐患。

2.基本用法
在前两天的内容后,我们直接在原有代码修改,增添RememberMe功能。
1.注册配置信息
package com.yzxb.SpringSecurity.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Bean
PasswordEncoder passwordEncoder() {
    return NoOpPasswordEncoder.getInstance();
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .and()
            .rememberMe()
            .key("ikun")
            .and()
            .csrf().disable();
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
            .withUser("ikun")
            .password("5201314")
            .roles("admin");
}

}
2.重启验证功能
此时重启项目,访问我们原来的接口:http://localhost:8080/demo/index,会发现登录窗口多了一个勾选框,当我们勾选之后,登录。之后关闭浏览器再次访问上述地址,就会发现无需重复登录了。
注意这里不要重启后端服务

那么这一切就因为多了一个勾选框就实现的流程,到底是怎么实现的呢?我们大概可以猜出来他会告诉服务端是否开启RememberMe功能,当请求后,我们会发现响应头多了一个Set-Cookie参数,如下图:

在响应头给了一个remember-me的字符串,以后所有的请求头Cookie字段都会自动携带这个令牌,服务端可以利用该令牌校验用户身份是否合法。
大致流程如上所述,但是读者们应该想起来我们前面说的问题了,这种令牌一旦泄露,不怀好意的Ikun们可以拿这个令牌随意访问系统,从而给系统带来风险和性能压力。怎么优化呢?
类似于我们前面的自定义认证一样,将Token持久化到DB即可。这里我们也可以做进一步的二次校验,从而保证系统的全局安全。

相关文章
|
算法 测试技术 编译器
掌握CTest:CTest综合指南
掌握CTest:CTest综合指南
1313 1
|
4月前
|
存储 人工智能 运维
AR眼镜+AI:重构工业运维场景的智能核心载体
AR眼镜融合AI、语音交互与影像技术,实现仪器仪表自动识别、分时巡检提示、全程录像追溯与远程协作指导,提升巡检效率60%以上,误判率低于0.5%,推动工业运维向智能化、标准化、可追溯转型,成为数字化转型关键终端。
|
5月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
MyBatisPlus是MyBatis的增强工具,简化单表CRUD操作,无需编写XML,通过BaseMapper、条件构造器、分页插件等实现高效开发,支持自定义SQL、逻辑删除、枚举与JSON处理,提升开发效率。
|
8月前
|
安全 搜索推荐 大数据
Dataphin资产上下架审批管理——让企业数据资产“可控、可追溯、高效流转”
Dataphin推出资产上下架审批管理功能,通过灵活分层审批、自定义流程模板及对接企业OA系统,实现数据资产全生命周期的统一管控与高效流转,提升数据安全与运营效率。
264 0
|
10月前
|
弹性计算
阿里云服务器【地域】怎么选择划算一些?哪个地域好?
选择阿里云服务器地域时,优先考虑用户所在地区以实现就近访问。从划算角度看,部分地域如华北3(张家口)、华北6(乌兰察布)、华南2(河源)、华中1(武汉)常有优惠活动。此外,华北1(青岛)地域的公网带宽价格更具优势,适合对带宽成本敏感的用户。具体信息可查看阿里云ECS页面或官方文档了解最新优惠和选择建议。
|
10月前
|
机器学习/深度学习 存储 分布式计算
ODPS驱动电商仓储革命:动态需求预测系统的落地实践
本方案基于ODPS构建“预测-仿真-决策”闭环系统,解决传统仓储中滞销积压与爆款缺货问题。通过动态特征工程、时空融合模型与库存仿真引擎,实现库存周转天数下降42%,缺货率下降65%,年损减少5000万以上,显著提升运营效率与GMV。
978 1
|
5月前
|
缓存 NoSQL Java
微服务高频面试题
本课程系统讲解微服务架构核心知识,涵盖SpringBoot与SpringCloud应用、Nacos注册与配置中心、OpenFeign远程调用、Sentinel熔断限流、Gateway网关鉴权、分布式事务Seata、RabbitMQ消息队列、Elasticsearch搜索及Redis缓存等技术,结合实战场景解析服务治理、数据同步与高并发处理方案。
|
7月前
|
安全 Linux iOS开发
Burp Suite Professional 2025.10 发布 - Web 应用安全、测试和扫描
Burp Suite Professional 2025.10 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
500 3
|
10月前
|
人工智能 前端开发 程序员
AI工具普及,为什么很多人觉得编程难学?
产品专家三桥君深入探讨AI时代下编程学习的核心挑战,分析AI工具对编程的影响,并提出构建知识树的学习策略,帮助开发者高效掌握编程技能,提升竞争力。
372 0
|
机器学习/深度学习 自然语言处理 数据可视化
DeepSeek生成模型(Generative Models)基础与实践
生成模型(Generative Models)是能够生成新数据的机器学习模型,广泛应用于图像和文本生成、数据增强等场景。通过学习数据分布,生成模型可创建与训练数据相似的新样本。DeepSeek提供了强大的工具和API,帮助高效构建和训练生成模型。本文将详细介绍使用DeepSeek进行生成模型的基础与实践,涵盖变分自编码器(VAE)和生成对抗网络(GAN)的实现,并通过代码示例帮助掌握这些技巧。