1.RememberMe简介及用法

简介: RememberMe是一种服务器端会话保持机制,用户勾选后关闭浏览器再打开无需重新登录。其通过Cookie存储令牌实现自动认证,避免频繁输入账号密码,提升用户体验,同时需注意安全风险与优化策略。

6⌥codecode6⌥codecode

1.RememberMe简介及用法

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

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")

2.重启验证功能此时重启项目,访问我们原来的接口:http://localhost:8080/demo/index,会发现登录窗口多了一个勾选框,当我们勾选之后,登录。之后关闭浏览器再次访问上述地址,就会发现无需重复登录了。注意这里不要重启后端服务那么这一切就因为多了一个勾选框就实现的流程,到底是怎么实现的呢?我们大概可以猜出来他会告诉服务端是否开启RememberMe功能,当请求后,我们会发现响应头多了一个Set-Cookie参数,如下图:在响应头给了一个remember-me的字符串,以后所有的请求头Cookie字段都会自动携带这个令牌,服务端可以利用该令牌校验用户身份是否合法。大致流程如上所述,但是读者们应该想起来我们前面说的问题了,这种令牌一旦泄露,不怀好意的Ikun们可以拿这个令牌随意访问系统,从而给系统带来风险和性能压力。怎么优化呢?类似于我们前面的自定义认证一样,将Token持久化到DB即可。这里我们也可以做进一步的二次校验,从而保证系统的全局安全。

油炸小波

2023-08-22 10:15

281

0

IP 属地广东

举报

分享到:

注册 / 登录 语雀进行评论

726字

关于语雀使用帮助数据安全服务协议English快速注册

Ctrl + J

大纲

1.基本简介

2.基本用法

1.注册配置信息

2.重启验证功能

Adblocker


相关文章
|
6月前
|
安全 Java 数据安全/隐私保护
认识SpringSecurity
Spring Security 是基于过滤器链的成熟安全框架,提供认证、鉴权及防御 CSRF 等攻击的核心功能,支持多种认证方式与灵活的权限控制模型。
|
6月前
|
测试技术 数据处理 微服务
基于稳定版量化交易系统开发案例设计的功能需求实现
在数字化时代,量化交易系统需兼顾高效性与稳定性。本文聚焦稳定版系统开发,探讨案例设计与功能需求,涵盖微服务架构、实时行情、信号生成、风控等核心环节,为构建精准、可靠的量化交易体系提供实践指导。
|
6月前
|
SQL 容灾 Nacos
Seata的部署和集成
本文介绍Seata分布式事务框架的部署与微服务集成。首先下载并解压Seata Server,修改配置文件application.yml,并在Nacos中配置seataServer.properties及数据库信息。创建seata数据库并运行SQL脚本初始化事务表。启动TC服务后,注册至Nacos。各微服务引入Seata依赖,配置application.yml连接TC。为实现高可用,搭建多节点TC集群,通过Nacos统一管理事务组映射,实现异地容灾与动态切换。微服务从Nacos读取client.properties,灵活绑定TC集群,提升系统稳定性与可维护性。(238字)
|
6月前
|
持续交付 项目管理
阿里巴巴-云效
本文介绍了如何开通并使用云效平台进行项目管理与自动化部署。涵盖服务开通、需求管理、代码托管及流水线构建等步骤,帮助团队高效协作,实现代码自动发布流程的搭建与体验。
|
数据采集 运维 数据挖掘
Pandas中的Rank用法:数据排序的高效工具
Pandas中的Rank用法:数据排序的高效工具
1027 0
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
|
数据可视化 开发工具 Android开发
Android Studio
Android Studio
989 1
|
机器学习/深度学习 算法 数据挖掘
深入理解SVM中的核函数及其应用
深入理解SVM中的核函数及其应用
947 0
|
测试技术 Python
将秒换算成时、分、秒
本文介绍了使用Python将总秒数转换为小时、分钟和秒的格式的方法,包括定义转换函数和格式化输出函数,并提供了完整的代码实现及测试用例,帮助用户更友好地展示时间信息。
1068 59
|
安全 物联网安全 物联网
IoT安全危机:智能家居的隐秘威胁
随着物联网技术的发展,智能家居日益普及,但其安全隐患也逐渐显现。本文探讨了智能家居的安全现状、风险及防范措施,强调了企业和用户共同提升安全意识的重要性,旨在构建一个安全可靠的智能家居环境。

热门文章

最新文章