瑞吉外卖 - 后台系统退出功能(4)
某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 + JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。
相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PDe_7uIg?pwd=x548
提取码:x548
文章目录
- 1.需求分析
- 2.代码开发
- 3.功能测试
1.需求分析
员工登陆后,页面会跳转到系统首页面(backend/index.html),此时会显示当前用户的用户名信息。

这个信息其实就是上一文中提到的服务端传回前端,然后使用 localStorage.setItem('userInfo', JSON.stringify(res.data)) 存储在浏览器中的用户数据。当我们点击右侧的退出按钮即可退出系统,退出系统页面后应该跳回登陆页面。
那么,点击退出按钮后会访问什么地址呢?我们同样使用调试台一测便知:

可以看到,当我们点击退出登陆按钮后会以 POST 方式请求 ”/employee/logout“,这便是我们接下来要实现的功能。
具体处理逻辑如下:
- 清理 Session 域中存储的用户 id;
- 返回结果。
2.代码开发
EmployeeController 中用于处理退出登陆的代码如下:
/*** 处理退出请求* 说明:退出操作需要将 Session 中的员工 id 移除,因此需要一个 HttpServletRequest 参数** @param request 请求对象* @return 响应对象*/
@PostMapping("/logout")
public R<String> logout(HttpServletRequest request) {// 1.从 Session 中移除员工 idrequest.getSession().removeAttribute("employee");// 2.返回退出成功结果return R.success("退出成功");
}
至此,我们的登陆退出功能就实现了,最终完整的 EmployeeController 代码如下:
package cn.javgo.reggie_take_out.controller;import cn.javgo.reggie_take_out.common.R;
import cn.javgo.reggie_take_out.entity.Employee;
import cn.javgo.reggie_take_out.service.EmployeeService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;/*** @author: JavGo* @description: TODO* @date: 2023/5/13 16:14*/
@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {@Resourceprivate EmployeeService employeeService;/*** 处理登陆请求* 说明:* 1.由于前端携带的用户名和密码是以 JSON 形式提交的,所以需要使用 @RequestBody 注解将请求体中的 JSON 数据转换为 Employee 对象* 2.由于前端传过来的是明文密码,所以需要对密码进行 MD5 加密处理* 3.需要使用 HttpServletRequest 对象获取 session 对象,用于将登陆成功的用户信息存入 session 中,以便后续的请求可以直接获取到用户信息** @param request 请求对象* @param employee 员工对象* @return 响应对象*/@PostMapping("/login")public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee) {// 1.将页面提交的密码进行 MD5 加密处理String password = employee.getPassword();password = DigestUtils.md5DigestAsHex(password.getBytes());// 2.根据用户名查询数据库/*LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Employee::getUsername,employee.getUsername());Employee emp = employeeService.getOne(queryWrapper);*/QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();queryWrapper.eq("username", employee.getUsername());Employee emp = employeeService.getOne(queryWrapper);// 3.如果没有查询到则返回登录失败结果if (emp == null) {return R.error("登陆失败");}// 4.进行密码比对,如果不一致则返回登录失败结果if (!emp.getPassword().equals(password)) {return R.error("登陆失败");}// 5.查看员工状态,如果为已禁用状态,则返回员工已禁用结果if (emp.getStatus() == 0) {return R.error("账号已禁用");}// 6.登录成功,将员工 id 存入 Session 并返回登录成功结果request.getSession().setAttribute("employee", emp.getId());return R.success(emp);}/*** 处理退出请求* 说明:退出操作需要将 Session 中的员工 id 移除,因此需要一个 HttpServletRequest 参数** @param request 请求对象* @return 响应对象*/@PostMapping("/logout")public R<String> logout(HttpServletRequest request) {// 1.从 Session 中移除员工 idrequest.getSession().removeAttribute("employee");// 2.返回退出成功结果return R.success("退出成功");}
}
3.功能测试
在上面的后端代码中,我们从 Session 域中移除了员工 id,其实在前端的 static/backend/index.html 代码中也进行了浏览器端存储的用户信息的清楚操作。
对应代码如下:

注意:再次强调,由于我们的静态文件都是存储在项目的 resources/static 目录下,所以当出现 404 的时候,就需要留意是否前端代码的路径缺少了 ”static“。当然,为了一劳永逸,我们可以在 IDEA 中按 ctrl + R 快捷键打开替换,然后一次性地在所有 ”/backend“ 前加上 ”/static“。
下面以 ”/backend“ 为例,胖友自行对 “/front”也应该做同样的修改:
启动应用,成功登陆后台,然后 F12 打开调试工具查看存储的用户信息变化:

点击退出按钮,回到登陆页面,用户信息被清理:

相关文章:
瑞吉外卖 - 后台系统退出功能(4)
某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…...
JavaScript 基础 API DOM(一)
1.1 作用和分类 作用: 就是使用 JS 去操作 html 和浏览器 分类:DOM (文档对象模型)、BOM(浏览器对象模型) 1.2 什么是DOM DOM( Document Object Model——文档对象模型)是用来呈现以及与任意 HTML 或 XML文档交互的…...
Java基础知识:1,DOS命令
1,盘名称 加 : 进入该盘目录下 例如:e: 进入e盘 2,dir 查看当前路径下文件和文件夹 3,md 文件夹名字 》 创建文件夹(md后要加空格) (md make directory) 4,c…...
NEFU ERP 企业资源计划[1] 详细知识点
NEFU ERP 企业资源计划[1] 详细知识点 ERP 企业资源管理计划第 0 章 术语第 1 章 ERP 概述1、什么是 ERP2、ERP 目的3、ERP 应用 第 2 章 ERP 理论与发展1、ERP 发展概述订货点法物料需求计划 MRP(时段 MRP、基本 MRP)闭环 MRPMRP II(制造资源计划&#…...
Science文章复现(Python):图1 - Aircraft obs(机载的观测 CO2)
之前有写过science文章后处理的复现Science文章复现(Python):在机载观测中明显的强烈南大洋碳吸收 在这里是针对图细节的理解: 首先需要下载这个项目 https://github.com/NCAR/so-co2-airborne-obs 这里的环境配置会比较麻烦 con…...
安全基础第十一天:nginx
目 录 一、nginx的反向代理 1.反向代理原理 2.反向代理的几种算法 (1)轮询(默认) (2)weight (3)ip_hash (4)fair(第三方) …...
设计模式之【命令模式】,方法调用的花式玩法
文章目录 一、什么是命令模式1、命令模式使用场景2、命令模式的主要角色3、命令模式优缺点4、命令模式注意事项及细节 二、使用示例1、命令模式的一般写法2、播放器功能案例3、遥控器案例 三、源码中的命令模式1、Thread 一、什么是命令模式 命令模式(Command Patt…...
企业需要专业电子邮件地址的4大原因
专业的企业电子邮件地址具有贵公司的自定义域名,而不是通用的Zoho Mail 、gmail或yahoo帐户,例如:john stargardening.com 大多数初学者使用不带域名的通用免费企业电子邮件帐户,这不是很专业。例如:zhangsan2022zoho.…...
国民游戏王者荣耀的真实地图开发之路
👉腾小云导读 相信很多人都玩过王者荣耀,大家在欣赏其华丽的游戏界面以及炫酷的游戏技能时,是否好奇过王者荣耀的地图是怎样开发出来的?在开发的历程中,都有哪些问题?是怎样解决的?本文将从其地…...
浅谈IDC数据中心综合布线第二篇——结构化布线
数据中心网络在当今的业务中扮演着越来越重要的作用,提供数据的存储、管理、共享、交换、应用等功能。在数据中心中,大量的数据在服务器、交换机、存储设备之间通过物理层的光缆(仅讨论光纤布线)进行传输。数据表明,在…...
电脑格式化后数据恢复软件EasyRecovery16
EasyRecovery是一款由Kroll Ontrack公司开发的专业数据恢复软件,旨在帮助用户从各种数据丢失情况下恢复文件。无论是因为误删除、格式化、分区丢失、系统崩溃还是其他原因导致的数据丢失,EasyRecovery都具有强大的恢复功能。 EasyRecovery提供了多种恢复…...
(2020)End-to-end Neural Coreference Resolution论文笔记
2020End-to-end Neural Coreference Resolution论文笔记 Abstract1 Introduction2 Related Work3 Task4 Model4.1 Scoring Architecture4.2 Span Representations5 Inference6 Learning7 Experiments7.1 HyperparametersWord representationsHidden dimensionsFeature encoding…...
kafka命令
查询kafka版本信息 kafka-configs.sh --describe --bootstrap-server localhost:9092 --version 查看所有topic [rootm10 bin]# kafka-topics.sh --list --zookeeper localhost:2181 __consumer_offsets kahn-topic-1 my_topic x_topic-1 创建一个topic,名为x_top…...
mybatis多表查询
多表查询有哪些情况 Mybatis 支持多表查询,常见的多表查询方式包括使用嵌套查询和关联查询 嵌套查询 嵌套查询是指在 SQL 语句中嵌套另外一个查询语句,可以用于在一个表中查询与另一表相关的数据。例如,在一个订单表中同时需要查询该订单所属…...
kafka 从入门到精通
kafka 安装 zookeeper模式 创建软件目录 mkdir /opt/soft cd /opt/soft下载 wget https://downloads.apache.org/kafka/3.4.0/kafka_2.13-3.4.0.tgz解压 tar -zxvf kafka_2.13-3.4.0.tgz 修改目录名称 mv kafka_2.13-3.4.0 kafka配置环境变量 vim /etc/profileexport K…...
写PPT没有思路, 这些底层方法论让你灵感爆棚……
作为一个10年经验的策划人,以下是个人多年经验,看完绝对对你写PPT会有很大帮助! 首先,有很多新手写PPT有一个不好的习惯,就是喜欢直接上手就打开PPT开始啪啪啪打字。 这是非常错误的,这就等于你是想到哪写…...
【小沐学Python】Python实现Web服务器(Flask+Vue+node.js,web单页增删改查)
文章目录 1、简介1.1 flask1.2 vue 2、开发2.1 新建flask项目2.2 安装flask库2.3 新建flask的主脚本2.4 新建Vue项目2.5 安装vue项目依赖项2.6 新增组件Ping.vue2.7 Ping.vue增加HTTP请求2.8 美化vue前端页面2.9 新增组件Books.vue2.10 flask增加路由Books2.11 Books.vue增加HT…...
甘肃非煤矿山电子封条 智慧矿山 opencv
甘肃非煤矿山电子封条 智慧煤矿接入国家矿山安全平台是通过pythonopencv网络模型,甘肃非煤矿山电子封条pythonopencv网络模型对关键位置(回风井口、运人井口、车辆出入口)对现场人员行为、数量、穿戴着装及设备状态各数据进行实时监控分析。p…...
工业识别与定位系统源码解决方案
工厂人员定位系统源码,工业领域定位系统源码 近年来人员定位系统在工业领域的发展势头迅猛,工业识别与定位成为促进制造业数字化的关键技术。通过实时定位可以判断所有的人、物、车的位置。实时定位系统要适用于复杂工业环境,单一技术是很难…...
PCL学习之滤波算法
前言 点云滤波作为常见的点云处理算法,一般是点云处理的第一步,对后续处理有很重要作用。滤波 有很多方面也有很多种功能,比如去除噪声点、离群点、点云平滑以及空洞、数据压缩等 原始点云数据往往包含大量散列点、孤立点,在获取…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

