1.RememberMe简介及用法

简介: 111

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

相关文章
|
3月前
|
消息中间件 存储 Java
消息中间件RabbitMQ(高级)
本文深入探讨RabbitMQ在生产环境中的高级应用,涵盖消息可靠性、延迟消息、消息堆积及集群高可用等核心问题。通过生产者确认、持久化、消费者确认机制确保消息不丢失;利用TTL与死信交换机实现延迟队列;借助惰性队列提升堆积能力;最后通过普通集群、镜像集群及仲裁队列实现高可用架构。
 消息中间件RabbitMQ(高级)
|
3月前
|
机器学习/深度学习 人工智能 编解码
阿里云 AI 服务器配置及价格表_今年最新阿里云GPU服务器租赁费用(1个月、1年和1小时收费明细表)
阿里云 AI 服务器提供多样化硬件组合方案,涵盖 CPU+GPU、CPU+FPGA、CPU+TPU、CPU+ASIC 等多种加速卡配置,具备超强计算能力,主要适用于人工智能、机器学习、深度学习等计算密集型任务,同时也可满足科学计算、图形可视化、视频处理等场景的算力需求。以下是其 GPU 服务器的具体规格、价格及适用场景整理:
|
2月前
|
人工智能 JSON 网络协议
AI 大模型 LLM API 深入解析:Gemini 3.0 Pro 的 SSE 流式响应与大模型接口跨区域延迟优化实践
本文对比Google Vertex AI与OpenAI在SSE协议处理上的差异,针对跨洋网络高延迟问题,提出通过聚合层优化TTFT。结合GRPC与REST的适配挑战,引入协议转换网关,实测P99延迟降低75%,显著提升连接稳定性与首 token 速度。
240 2
|
3月前
|
SQL 监控 机器人
|
4月前
|
存储 安全 开发者
阿里云4核8G云服务器收费标准与活动价格解析:u1/u2i/c9i多规格价格参考
阿里云4核8G服务器价格是多少?当前,经济型e实例的按量付费最低标准为每小时0.45元,包月费用为159.84元,而包年费用则为1477.44元。在阿里云的活动中,通用算力型u1实例的包年价格低至955.58元起,u2i实例的包年价格为1170.26元起,而计算型c9i实例的包年价格则为3136.81元起。不同实例类型的4核8G云服务器,其价格存在差异,且日常购买价格与活动期间价格也有所不同。以下是阿里云4核8G云服务器的最新价格概览。
1147 4
阿里云4核8G云服务器收费标准与活动价格解析:u1/u2i/c9i多规格价格参考
|
3月前
|
Web App开发 JavaScript 前端开发
Vue实用组件与工具使用指南
本文系统梳理Vue开发中常用UI组件库(如Element Plus、Vant)、状态管理(Pinia)、工程化(Vite)及调试工具,结合实操示例讲解核心用法与选型建议,助力开发者提升效率、规范流程、聚焦业务。
157 0
|
3月前
|
存储 人工智能 图形学
阿里云无影 GPU 云电脑(NVIDIA RTX 5880 显卡)收费价格表:月付与年付费用详解
阿里云无影 GPU 云电脑凭借搭载的 NVIDIA RTX 5880 专业显卡,成为高性能计算场景的热门选择 —— 无论是 3D 建模、工业设计这类图形密集型任务,还是 AI 推理、机器人仿真等计算需求,都能依靠其强劲的硬件配置高效完成。对有这类需求的用户来说,最关心的就是不同配置的具体收费标准,尤其是月付和年付的费用差异,以及如何根据自身场景选择性价比最高的方案。本文结合最新的价格信息和配置细节,用通俗的语言拆解各规格的收费情况,同时补充适用场景和计费方式说明,帮大家清晰掌握成本构成与选型逻辑。
|
10月前
|
传感器 人工智能 供应链
一场关于物料清单BOM的深度对话
这段对话发生在某科技公司茶水间,新入职的采购专员张薇向供应链总监陈峰请教BOM表的作用。陈峰以乐高说明书为喻,解释BOM是产品的物料清单,涵盖零件型号、用量与供应商信息。他通过实例说明BOM错误可能引发采购、生产和售后等环节的连锁问题,如材料浪费、返工增加及客户索赔。最后,陈峰提出通过源头管控、动态监测和反向追溯优化BOM管理,并强调其准确率对提升企业毛利率的重要性,展现了BOM在现代制造业中“悄然重写利润法则”的核心地位。
283 12
|
11月前
|
存储 机器学习/深度学习 关系型数据库
《ONNX模型牵手MySQL:数据交换全攻略》
ONNX模型与MySQL数据库的数据交换是机器学习系统中的关键环节。ONNX作为开放式神经网络交换格式,提供跨框架的模型兼容性;MySQL则以高效稳定的结构化数据管理能力著称。两者结合时,需解决数据格式适配、表结构设计及预处理等问题。通过序列化、反序列化和性能优化(如索引、批量操作、缓存),可实现高效的数据交互。同时,还需应对数据一致性、格式匹配及连接问题,确保系统稳定性和可扩展性,为AI应用提供坚实支持。
364 32

热门文章

最新文章