1.RememberMe简介及用法

简介: RememberMe是Web应用中保持用户登录状态的机制,避免重复登录。它通过服务端生成令牌(Token)存于Cookie实现,而非保存用户名密码。用户勾选“记住我”后,关闭浏览器再访问可自动登录。但令牌泄露可能带来安全风险,可通过持久化Token至数据库并增加二次校验提升安全性。

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

打开网页登录

前端Cookie记录

用户第一次登录

打开网页

后端服务器

用户第二次登录
自动将Cookie发送给服务器​
对Cookie信息校验

Cookie是否有效

自动进入系统
有效​


跳转至登录页面
重新走登录流程
无效​

2.基本用法
在前两天的内容后,我们直接在原有代码修改,增添RememberMe功能。
1.注册配置信息
Java
运行代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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即可。这里我们也可以做进一步的二次校验,从而保证系统的全局安全。

相关文章
|
25天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
816 225
|
9天前
|
人工智能 Java API
【Azure AI Search】如何通过Entra ID RBAC认证连接中国区 Azure AI Search
本文介绍如何在Java SDK中配置中国区AI Search资源访问。由于默认认证地址为全球环境(https://search.azure.com),在中国区需修改为https://search.azure.cn,并通过设置SearchAudience.AZURE_CHINA解决认证失败问题,确保资源正常获取。
99 18
|
25天前
|
人工智能 安全 程序员
AI会写代码,但谁来定义问题?
在AI编码时代,技术债务问题被急剧放大。AI既能放大编码能力,也会放大错误和模糊需求带来的问题。本文探讨了需求分析在AI时代的关键作用,提出了有效路径,强调需求分析师将成为AI时代最重要的角色,并确保软件系统真正解决业务问题。
182 98
|
8天前
|
JavaScript 定位技术 API
Trilium Notes:构建个人知识库的开源神器
Trilium Notes 是一款开源、免费的个人知识管理系统,支持树状结构、笔记克隆、富文本与 Markdown、代码高亮、加密笔记、思维导图及 REST API。可本地部署,跨平台同步,助力构建“第二大脑”,适合学习、研发与创意写作。
145 8
 Trilium Notes:构建个人知识库的开源神器
|
3天前
|
Linux 开发工具 Python
具身智能:零基础入门睿尔曼机械臂(三)——夹爪抓取与释放控制全解析
本文详解睿尔曼第三代机械臂电动夹爪的Python SDK控制方法,聚焦`set_gripper_pick_on`与`set_gripper_release`核心函数,拆解速度、力度、阻塞等参数含义,结合“运动+抓取+释放”完整流程代码,手把手实现夹爪抓放实操,助力零基础用户快速掌握从代码到动作的全流程控制。
63 13
|
机器学习/深度学习 自然语言处理 搜索推荐
为什么说多模态是推荐系统破局的关键?来自饿了么一线的实战复盘
推荐系统作为互联网时代连接用户与信息的核心技术,正在经历从传统协同过滤向多模态智能推荐的重要变革。随着深度学习技术的快速发展,特别是大语言模型和多模态预训练技术的成熟,推荐系统开始从单纯依赖用户行为ID特征转向充分利用商品图像、文本描述等丰富内容信息的新范式。
354 18
|
18天前
|
人工智能 自然语言处理 数据可视化
阿里云万小智AI建站是什么?产品架构、优势、功能与收费标准参考
万小智AI建站是阿里云面向企业及个人用户提供的一款AI驱动的自助建站产品,无需编程基础,通过对话式交互、可视化拖拽操作和AI辅助内容生成,即可快速搭建响应式网站。用户购买后无需单独配置服务器,只需注册域名并完成备案(如部署在中国内地),即可上线网站。
194 20
|
11天前
|
数据采集 人工智能 搜索推荐
AI 问答占 52%!长沙别墅装修 GEO 突围:30 天引用率暴涨 40%
周有贵,巴黎学院人工智能博士,GGI商学院GEO首席技术专家,专注AI时代数字营销革新。2025年12月1日,长沙著名别墅设计师张主华专程拜访交流,共探GEO技术在装修设计行业中的AI引流逻辑与实操应用。面对生成式AI问答入口占比突破52%的新趋势,传统SEO正被GEO取代——从链接点击到答案呈现,企业需通过构建灯塔内容、E-E-A-T信任链与结构化数据,让品牌信息被AI优先引用。本次对话揭示:未来流量之争,本质是“被AI推荐”的能力之争。
|
8天前
|
前端开发 JavaScript Go
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:为什么选 Golang+Vue3 这套组合?
go-wind-admin 采用 Golang + Vue3 技术栈,融合高性能后端与高效前端生态。后端基于 go-kratos、ent/gorm 灵活适配复杂业务,前端结合 Vue3、TypeScript 与 Vben Admin,提升开发效率与可维护性,兼顾性能、扩展性与企业级需求,是中后台系统的理想选择。(239字)
93 6