RememberMe简介及用法

简介: RememberMe是一种保持用户登录状态的机制,通过服务端生成令牌存于Cookie,实现关闭浏览器后仍可自动登录。不同于保存用户名密码,它基于安全令牌验证,结合持久化存储与二次校验可提升安全性,避免令牌泄露风险。

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即可。这里我们也可以做进一步的二次校验,从而保证系统的全局安全。

相关文章
|
9月前
|
监控 算法 Unix
Thread.sleep(0) 到底有什么用(读完就懂)
Thread.Sleep用于让线程暂停执行一段时间,不参与CPU竞争。Sleep(1000)并不保证精确唤醒时间,因系统调度受优先级和竞争影响;而Sleep(0)会触发立即重新计算各线程优先级,促使CPU切换,避免线程长时间占用导致界面假死。正确理解其原理有助于优化多线程程序性能与响应性。
|
9月前
|
SQL 运维 分布式计算
如何做好SQL质量监控
SLS推出用户级SQL质量监控功能,集成于CloudLens for SLS,提供健康分、服务指标、运行明细、SQL Pattern分析及优化建议五大维度,助力用户全面掌握SQL使用情况,实现精细化管理与性能优化,提升日志分析效率与体验。
|
9月前
|
存储 安全 网络安全
数据加密有什么作用?一文带你理解数据加密
数据如血液,流动中安全至关重要。本文深入浅出解析数据加密:从日常场景到核心技术,详解其保密、防篡改、身份验证三重作用,剖析对称与非对称加密原理,并探讨企业实践中的数据分类、加密时机与密钥管理,揭示加密不仅是技术,更是数字信任的基石。
|
9月前
|
Web App开发 传感器 物联网
WebGL 数字孪生项目开发
WebGL是实现网页端数字孪生的核心技术,无需插件即可调用GPU进行高性能3D渲染。项目开发多采用Three.js、Cesium等引擎,结合glTF模型、PBR材质与LOD优化,通过实例化渲染、纹理压缩与遮挡剔除保障性能。验收需关注帧率、加载速度、显存占用及数据延迟,确保跨端稳定运行。#webgl开发 #数字孪生
|
9月前
|
数据采集 领域建模 数据库
领域模型图(数据架构/ER图)
通过四色原型法进行领域建模,提取数据架构核心要素:红色时标原型(MI)表征业务流程节点,绿色参与方-物品原型(PPT)构建实体,黄色角色原型(Role)明确参与主体,蓝色描述原型(DESC)定义属性。基于风控系统流程,逐步构建领域模型,最终提炼出ER图,清晰展现实体间一对一、一对多、多对多关系,实现从业务到数据模型的精准转化。(238字)
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型专业名词解释手册
本手册由油炸小波设计提示词,Manus创作,系统梳理大语言模型核心概念,涵盖基础架构、训练方法、优化技术、应用推理及伦理评估。内容详实,术语权威,助力深入理解AI大模型世界。
|
9月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud是Spring推出的微服务统一解决方案,弥补了各技术分散的不足,具备约定优于配置、组件丰富、开箱即用等特点。通过伦敦地铁站命名版本,避免与子项目版本冲突。Spring Cloud Alibaba融合阿里开源组件(如Nacos、Sentinel、Seata等),提供完整微服务生态,因Netflix组件停更,现成为主流选择。本节介绍其诞生背景、版本机制及技术体系,为后续实战奠定基础。
|
Ubuntu 定位技术 TensorFlow
源码编译安装ROCm以运行tensorflow-rocm(适用于Ubuntu 23.04)
总结一番,完成这趟奇妙的技术之旅后,乐趣多多,还能享受 tensorflow-rocm 带来的便利和速度。这趟旅程需要耐心,勇气,以及对技术的热爱。朋友,做好准备,让你的Ubuntu系统展翅高飞吧!
760 9
|
9月前
|
Web App开发 缓存 监控
Playwright 并行测试:配置与优化技巧
本文详细介绍了如何利用Playwright实现高效的并行测试。从基础的workers配置到高级的分片策略,文章涵盖了测试隔离、资源竞争处理及配置文件优化等关键实践。通过分享性能调优建议与常见陷阱的避免方法,旨在帮助团队显著缩短测试执行时间,构建稳定且可扩展的自动化测试体系。
|
9月前
|
JSON API 数据库
如何写好一篇技术方案
本模板用于规范产品需求文档,涵盖项目背景、变更记录、功能模块、流程图、API设计等内容,支持语雀卡片与文件附件,提升团队协作效率。

热门文章

最新文章