SpringBoot登录退出|苍穹外卖登录退出分析

ops/2024/12/23 0:32:43/

文章目录

    • 概要
    • 整体流程
    • 注意事项
      • 一、拦截路径
      • 二、token
      • 三、注册防止用户重复提交
    • 苍穹外卖登录退出分析
      • 注意
      • 解决JWT退出后依然有效的问题

概要

结合Spring Boot和Vue3实现安全的用户登录退出功能,并使用拦截器、JWT和Redis缓存来提高系统的安全性和性能。

整体流程

在这里插入图片描述

注意事项

一、拦截路径

像登录页面的路径就不要拦截了,否则都不能登录了

例如:

java">@Configuration
public class WebMvcConfiguration extends WebMvcConfigurationSupport {@Autowiredprivate JwtTokenapiInterceptor jwtTokenapiInterceptor;/*** 注册自定义拦截器*/protected void addInterceptors(InterceptorRegistry registry) {// 添加拦截器  // 添加拦截路径  排除拦截路径registry.addInterceptor(jwtTokenapiInterceptor).addPathPatterns("/api/**").excludePathPatterns("/api/employee/login"); // 不拦截登录的接口}
}

二、token

  1. 用户登录验证密码等通过后,生成token,token中可存用户id,并存入redis(将token存储到redis中,便于管理token的状态和生命周期)。
  2. 下次请求拦截器先拦截,解析token中的用户id,然后从redis里面读取token验证,验证用户合法性。
  3. 退出登录,前端发一个请求给后端,删除redis中的token。

注意:

  • 不要将敏感信息(如密码)放在token中。
  • 妥善保管用于生成和验证token的密钥。

三、注册防止用户重复提交

我自己写了一个小demo,邮箱注册登录。

发送验证码,可能不小心点了两下等重复提交操作。解决方法:用redis

其他方法:
记录发送时间戳后端可以记录每个用户发送验证码的时间戳。如果用户在短时间内发送多次验证码请求,后端可以检查最新的请求时间戳与上次请求时间戳的间隔,如果间隔时间太短,就拒绝处理额外的请求
前端限制:在前端实现点击发送验证码按钮后,禁用按钮一段时间,防止用户连续点击发送。可以在发送验证码后,将按钮禁用一段时间,以防止用户误操作多次点击发送。

苍穹外卖登录退出分析

定义拦截器:
在这里插入图片描述

注册拦截器:

在这里插入图片描述

用户登录:
用户提交登录请求➡️后端认证用户(拦截器会放行登录接口,先判断用户名密码,然后生成token)➡️生成令牌token,并将其返回给客户端

java">@PostMapping("/login")
public Result<EmployeeLoginVO> login(@RequestBody EmployeeLoginDTO employeeLoginDTO) {log.info("员工登录:{}", employeeLoginDTO);Employee employee = employeeService.login(employeeLoginDTO);// 登录成功后,生成jwt令牌Map<String, Object> claims = new HashMap<>();// token中存入用户idclaims.put(JwtClaimsConstant.EMP_ID, employee.getId());String token = JwtUtil.createJWT(jwtProperties.getAdminSecretKey(),jwtProperties.getAdminTtl(),claims);EmployeeLoginVO employeeLoginVO = EmployeeLoginVO.builder().id(employee.getId()).userName(employee.getUsername()).name(employee.getName()).token(token).build();return Result.success(employeeLoginVO);
}

用户退出:

java"> @PostMapping("/logout")public Result<String> logout() {return Result.success();}

看看前端代码:
在这里插入图片描述

登录成功之后会把token存入本地cookie。
在这里插入图片描述
之后的请求,会使用axios的拦截器为每个请求的headers添加一个token,后端拦截器根据此token用于身份验证。

// 部分代码
if (UserModule.token) {config.headers['token'] = UserModule.token
} else if (UserModule.token && config.url != '/login') {window.location.href = '/login'return false
}

注意

如果苍穹的 Token 仅依靠 JWT 进行验证,而不通过 Redis 校验,那么退出实际上是伪退出。你可以复制退出前的 Token,退出登录后再将其粘贴到请求头中,依然可以继续使用。前端发起退出操作请求,清除本地Cookie存储的 Token,后端接收到请求后直接返回成功。让登录失效的关键在于前端,而不是后端。JWT 的过期时间在生成时就已经确定,后端无法动态更改。因此,Token 本身并没有立即失效,退出只是前端移除它了,Token 依然有效。
在这里插入图片描述

解决JWT退出后依然有效的问题

  1. 将Token存储到Redis中并进行验证。在每次请求时校验Redis中的Token是否有效。当用户退出时,从Redis中删除该Token
  2. 使用双Token机制(Access Token + Refresh Token)

❤觉得有用的可以留个关注ya~❤


http://www.ppmy.cn/ops/109970.html

相关文章

江协科技stm32————11-3 软件读写W25Q64

目录 MySPI.c W24Q64.c W25Q64_Ins.h main.c MySPI.c 包含通信引脚封装、初始化以及SPI通信的3个拼图&#xff08;起始、终止和交换一个字节&#xff09; #include "stm32f10x.h" // Device headervoid MySPI_W_SS(uint8_t BitValue) //ss cs…

学习Vue3的第五天

目录 API对比 shallowRef 与 shallowReactive 对比总结 使用场景 总结 readonly 与 shallowReadonly 对比总结 使用场景 总结 toRaw 与 markRaw 对比总结 使用场景 总结 customRef 应用场景 总结 示例&#xff1a;异步数据获取 Vue3新组件 Teleport Suspen…

算法:数字化系统的智慧核心

在当今快速发展的数字化时代&#xff0c;算法在数字化系统中扮演着至关重要的角色。从数字孪生系统到物联网应用&#xff0c;算法不仅是技术进步的推动力&#xff0c;更是实现智能化、自动化的核心。本文将探讨数字化系统中算法的重要性&#xff0c;以及它们是如何被实现和集成…

Docker Compose

1 常用docker-compose.yml模版 1.1 java程序 version: 3 services:trackfusion:image: eclipse-temurin:17.0.12_7-jdkrestart: always container_name: trackfusionprivileged: trueports:- 18080:8080environment:#配置时区- TZAsia/Shanghai- SET_CONTAINER_TIMEZONEtrue-…

如何用MATLAB搭建ResNet网络(复现论文)

文章目录 前言基础工具网络搭建ResNet网络代码完整代码总结参考文献 前言 之前暑假实习了3个月&#xff0c;后来又赶上开学一堆事&#xff0c;现在终于有时间记录一下学习经历。新的学期开始了&#xff0c;要继续努力。 因为最近要做一个无人机航迹分类的项目&#xff0c;所以…

YOLOV3实现越界检测——智能安防

目录 应用前景 1. 安全监控系统 2. 家庭安防系统 3. 无人机监控 4. 交通管理 5. 无人驾驶技术 6. 大型活动现场 代码说明 1. YOLO 模型加载 2. 摄像头视频流捕获 3. 安全区域绘制 4. YOLOv3 目标检测 5. 过滤和标记人类目标 6. 入侵检测 7. 结果显示和退出 总结…

大模型教程:使用 Milvus、vLLM 和 Llama 3.1 搭建 RAG 应用

vLLM 是一个简单易用的 LLM 推理服务库。加州大学伯克利分校于 2024 年 7 月将 vLLM 作为孵化项目正式捐赠给 LF AI & Data Foundation 基金会。欢迎 vLLM 加入 LF AI & Data 大家庭&#xff01;&#x1f389; 在主流的 AI 应用架构中&#xff0c;大语言模型&#xff…

[Linux]:动静态库

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 动静态库的介绍 一般而言&#xff0c;库分为动态库和静态库。 在Linux当中…