1.RememberMe简介及用法

简介: RememberMe功能并非简单保存用户名密码,而是通过服务端生成令牌(Token),借助Cookie实现用户关闭浏览器后仍保持登录状态。勾选“记住我”后,系统在响应头设置remember-me令牌,后续请求自动携带该令牌验证身份。为提升安全性,可将Token持久化至数据库并增加二次校验机制,防止令牌泄露带来的安全风险。

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

相关文章
|
9月前
|
NoSQL Linux Shell
2-MongoDB单机部署
本文详细介绍MongoDB在Windows和Linux系统下的安装、配置与启动方法,包括下载地址、版本选择、解压安装、命令行及配置文件启动方式,并介绍Shell连接、图形化工具Compass的使用,以及Linux环境下的服务部署与防火墙设置,附带常用安装包下载链接。
 2-MongoDB单机部署
|
9月前
|
人工智能 Serverless API
一键部署Stable Diffusion教程
本教程指导用户通过阿里云函数计算一键部署Stable Diffusion,支持多种绘图风格,提供免费额度体验。包含详细步骤与注意事项,助力快速搭建AI绘画环境。
一键部署Stable Diffusion教程
|
9月前
|
Java 数据库连接 调度
xxljob执行源码分析
本文深入解析XXL-JOB分布式任务调度框架源码,涵盖架构设计、核心执行流程与关键线程池机制。内容包括任务触发、注册、失败重试、日志报告及时间轮调度原理,结合带中文注释的源码包与分析导图,全面剖析其高性能设计实现。
 xxljob执行源码分析
|
9月前
|
存储 算法 BI
xxljob本地运行
本文介绍XXL-JOB分布式任务调度框架的本地部署与使用流程,涵盖源码获取、服务端数据库初始化、配置修改、服务启动及客户端注册执行器等步骤,并演示如何配置调度任务、选择路由策略及测试执行效果,帮助快速上手使用。
 xxljob本地运行
|
9月前
|
缓存 开发工具 git
QLExpress使用及源码分析
基于阿里巴巴QLExpress规则引擎,通过实体构建、接口定义与脚本编写(如user.yaml),实现灵活的业务规则配置。支持AST语法树解析、上下文赋值与缓存机制,适用于动态表达式执行与规则计算场景。
|
人工智能 自然语言处理 JavaScript
高产似母猪! AI+低代码引擎发布 0.13.15: 全面支持国际化
VTJ.PRO发布v0.13.15版本,新增对vue-i18n国际化的深度集成,支持多语言可视化管理、动态绑定及实时预览切换,全面构建企业级应用核心能力。此前已支持全局配置、Swagger API一键导入等功能,助力开发者高效构建现代化、国际化企业应用。项目秉持“降低复杂度,不降低自由度”理念,基于Vite + Vue 3 + TypeScript现代开发栈,提升开发效率与协作体验。未来将加强AI辅助开发能力,探索自然语言生成组件与页面的可能。开源地址:https://gitee.com/newgateway/vtj,立即体验:https://vtj.pro。
418 6
|
供应链 JavaScript 测试技术
硬件产品研发管理工具实战指南
本文深入剖析硬件研发中的三大核心挑战:需求传递失真、BOM管理混乱与测试验证低效,并结合学术研究与实战案例,提出可落地的解决方案框架。通过“需求穿透管理”、“BOM智能管控”和“测试自动化闭环”等方法,帮助企业提升研发效率与产品质量。同时推荐多款实用工具,并提供三步启动升级路径,助力硬件团队实现管理升级,降低项目风险,提升交付质量。
|
9月前
|
人工智能 搜索推荐 物联网
两大核心+四轮驱动Geo:获客成本降35-60%,权威度升210%
在AI重塑搜索的今天,于磊老师首创“两大核心+四轮驱动”Geo优化体系,以人性化内容与交叉验证构建信任,通过E-E-A-T实践、结构化布局、精准关键词与权威引用,助力企业降低获客成本35%-60%,提升AI引用率,打造品牌权威,实现内容到商业价值的高效转化。
354 4
|
9月前
|
负载均衡 Java Nacos
Gateway服务网关
网关是微服务架构的统一入口,实现请求路由、权限控制与限流。SpringCloud Gateway基于WebFlux,性能优于Zuul。支持断言与过滤器工厂,可自定义全局过滤器,解决跨域等问题,是微服务流量管控的核心组件。
|
9月前
|
供应链 算法 API
1688 BAPI 实时询价比价技术解析:驱动智能采购决策
1688开放平台实时询价比价API重构B2B采购流程,通过动态询价引擎、多目标比价算法与智能预警系统,实现秒级响应、精准决策。支持并发请求、帕累托优化与价格波动预测,集成Python调用示例,助力企业采购周期缩短至5分钟内,决策错误率下降62%,服务超23万商家,日均处理200万+请求,推动供应链高效数字化转型。

热门文章

最新文章