瑞吉外卖 —— 2、后台登录和登出

news/2024/5/5 5:13:02/文章来源:https://blog.csdn.net/Mr_zhangyj/article/details/126570873

1、后台登录功能

1.1、接口分析

通过浏览器调试工具 F12 可以发现,在登录页面点击登录后,发送 POST 请求 http://localhost:8080/employee/login ,并将输入的账号和密码信息以 JSON 格式发送给后台

前端校验代码如下:

1.1.2、登录校验逻辑

1、将页面提交的密码password进行md5加密处理
2、根据页面提交的用户名username查询数据库
3、如果没有查询到则返回登录失败结果
4、密码比对,如果不一致则返回登录失败结果
5、查看员工状态,如果为已禁用状态,则返回员工已禁用结果
6、登录成功,将员工id存入Session并返回登录成功结果 

1.2、代码

首先导入资料中的 Employee 实体类,然后创建对应的 mapper、service、controller

@Mapper
public interface EmployeeMapper extends BaseMapper<Employee> {
}
public interface EmployeeService extends IService<Employee> {
}
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {
}

1.2.1、统一的返回结果实体类

package com.itheima.reggie.common;import lombok.Data;
import java.util.HashMap;
import java.util.Map;// 通用结果返回集
@Data
public class R<T> {private Integer code; //编码:1成功,0和其它数字为失败private String msg; //错误信息private T data; //数据private Map map = new HashMap(); //动态数据public static <T> R<T> success(T object) {R<T> r = new R<T>();r.data = object;r.code = 1;return r;}public static <T> R<T> error(String msg) {R r = new R();r.msg = msg;r.code = 0;return r;}public R<T> add(String key, Object value) {this.map.put(key, value);return this;}}

1.2.2、controller 方法

package com.itheima.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.reggie.common.R;
import com.itheima.reggie.entity.Employee;
import com.itheima.reggie.service.EmployeeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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.servlet.http.HttpServletRequest;/*** @Author zhang* @Date 2022/8/30 - 21:46* @Version 1.0*/
@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;/*** 员工登录* @param employee  含有前端提供的账号密码信息* @param request   用于向浏览器的session域储存用户信息* @return*/@PostMapping("/login")public R<Employee> login(@RequestBody Employee employee,HttpServletRequest request){// 将页面提交的密码password进行md5加密处理String password = employee.getPassword();password = DigestUtils.md5DigestAsHex(password.getBytes());// 根据页面提交的用户名 username 查询数据库LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Employee::getUsername, employee.getUsername());Employee emp = employeeService.getOne(queryWrapper);// 如果没有查询到则返回登录失败结果if(emp == null){return R.error("用户名或密码错误");}// 密码比对,如果不一致则返回登录失败结果if(!emp.getPassword().equals(password)){return R.error("用户名或密码错误");}// 查看员工状态,如果为已禁用状态,则返回员工已禁用结果if(emp.getStatus() == 0){return R.error("该账号已被禁用");}// 登录成功,将员工id存入Session并返回登录成功结果 request.getSession().setAttribute("employee", employee.getId());return R.success(emp);}}

1.3、测试

测试前,可以先修改请求超时时间,避免调试时间过长导致报错。

修改 js/request.js 下的 timeout 数值

登录成功后,可以在浏览器的 Local Storage 中看到登录的用户信息

前端方法如下

2、后台退出功能

2.1、分析

点击退出登录按钮后,浏览器发送 http://localhost:8080/employee/logout 请求,方式为 POST

后台只需要在 controller 方法中清理 Session 中的用户 id 并返回结果即可。

2.2、代码

    /*** 退出登录* @param request 用于删除session域中的用户信息* @return*/@PostMapping("/logout")public R<String> logout(HttpServletRequest request){// 清理Session域中保存的当前登录员工的idrequest.getSession().removeAttribute("employee");return R.success("退出成功");}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_3419.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop源码解析之Mapper数量计算公式

前言 据说&#xff0c;自0.20.0版本开始&#xff0c;Hadoop同时提供了新旧两套MapReduce API&#xff0c;并在后续版本中也同时支持这两种API的使用。新版本MR API在旧的基础进行了扩展&#xff0c;也制定了新的split计算方式。新版本MR API在包org.apache.hadoop.mapreduce及…

Python基于Django的汽车销售网站

本汽车销售商城采用的数据库是Mysql&#xff0c;使用Django框架开发。在设计过程中&#xff0c;充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 汽车销售商城主要是为了提高工作人员的工作效率和更方便快捷的满足用户…

Win7下安装Docker(虚拟机win7)

在虚拟机VM里面安装一个win7用于安装Docker docker-toolbox-windows-docker-toolbox安装包下载_开源镜像站-阿里云 直接下载圈起来的这个就好了 直接拷贝到虚拟机系统win7里面安装&#xff0c;全部勾起来直接下一步安装即可 安装好后&#xff0c;会有三个图标 直接点击Dock…

自动化情侣微信早报信息定时推送

文章目录一、效果展示二、配置config.txt&#xff08;重点&#xff09;2.1 填写appID和appsecret2.1 创建测试模板填写template_id2.4 填写user2.5 填写weather_key2.6 填写剩下其他框选内容即可三、运行软件3.1 选择config.txt文件并设定时间3.2 运行软件3.3 效果展示一、效果…

12种解决CSS旧问题的新技巧

如果您一直在使用CSS&#xff0c;那么很可能会遇到一些布局或跨浏览器兼容性等问题。例如&#xff0c;CSS3的样式不太适用于IE的某些旧版本。而有时候&#xff0c;当我们准备使用某项功能时&#xff0c;却发现它无法广泛地得到各种浏览器的行为支持。因此&#xff0c;在从事Web…

第13章Linux实操篇-进程管理(重点)

第13章Linux实操篇-进程管理(重点) 文章目录第13章Linux实操篇-进程管理(重点)13.1基本介绍13.2显示系统执行的进程13.2.1基本介绍13.2.2ps详解13.2.3应用实例13.3终止进程kill和killall13.3.1介绍13.3.2基本语法13.3.3最佳实践13.4查看进程树pstree13.4.1基本语法13.4.2常用选…

Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第12章 Vue3.X新特性解析 12.1 Vue3.0 新特性

Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 文章目录Vue.js核心技术解析与uni-app跨平台实战开发学习笔记第12章 Vue3.X新特性解析12.1 Vue3.0 新特性第12章 Vue3.X新特性解析 12.1 Vue3.0 新特性 Vue3.0 中需要重点关注的两个新特性&#xff1a; 双向数据绑定的原…

JVM资料阅读笔记总结-1

前言 最近读周志明的《深入理解Java虚拟机》以及半栈工程师的Java虚拟机文章&#xff0c;对JVM又重新复习了一遍&#xff0c;每次看后收获都不一样&#xff08;因为没有debug能力&#xff0c;还是很懵懂&#xff09;&#xff0c;担心会忘记将自己读后总结记录下来 总结内容 j…

期货开户止损是通向成功的保障

一、情绪波动止损法&#xff1a; 如果买入股票后&#xff0c;感觉不好&#xff0c;寝食难安&#xff0c;这说明自己认为买入理由不充分或信心不足&#xff0c;这将影响今后的正常操作&#xff0c;故应果断卖出离场。 二、空间位移止损法&#xff1a; 1、 初始止损法&#xf…

调用MapReuce对文件中各单词出现次数统计

调用MapReduce对文件中各单词出现次数统计 调用MapReuce对文件中各单词出现次数统计一、安装环境二、需求分析 1.创建hadoop账户2.设置Hadoop密码3.为Hadoop用户增加管理员权限4.更新apt5.安装vim6.安装SSH、配置SSH无密码登陆 三、安装java环境 1.安装JDK2.验证JDK安装情况3.…

SpringBoot 启用 GZIP 对响应进行压缩

SpringBoot Web 应用默认是不启用响应数据的压缩&#xff0c;对大的文本类型的响应数据进行压缩是十分必要的&#xff0c;如 JSON, XML 等应用数据&#xff0c;甚至是 JS, CSS 等。 早先的 Web 应用基本是要配置一个叫做 GzipFilter 之类的东西&#xff0c;然后判断请求的 Acc…

Windows与网络基础-1-2-虚拟机安装Windows10和window server2016

目录 一、虚拟机安装软件和ios镜像文件 二、新建虚拟机 2.1 文件—>新建虚拟机 2.2 选择典型安装 2.3 选择稍后安装 2.4 选择操作系统类型和版本 2.5 虚拟机名称和安装路径 2.6 指定磁盘大小 2.7 配置硬件信息 2.8 进入系统安装界面 2.9 选择系统版本 2.10 选择自…

LeetCode精选200道--二叉树篇(二)

二叉树篇&#xff08;二&#xff09;前言完全二叉树的节点个数普通二叉树逻辑递归完全二叉树逻辑平衡二叉树题外话递归二叉树的所有路径思路递归相同的树100. 相同的树另一棵树的子树左叶子之和思路找树左下角的值思路112. 路径总和思路106. 从中序与后序遍历序列构造二叉树根据…

FLASH:一种高效的Transformer设计

背景 近年来&#xff0c;Transformer凭借其优秀的设计&#xff0c;在文本、图像、语音等方向大杀四方。但是由于其attention的二次复杂度限制了其在长序列上的应用。本文提出了一种快(速度快)、省(省显存)的模型FLASH(Fast Linear Attention with a Single Head)&#xff0c;在…

SpringBoot 和 Vue前后端分离在线工具项目实战,源码+超详细讲解

一、前言 主要通过SpringBoot和Vue来实现一个前后端分离的在线工具平台&#xff0c;包含PDF转换、图片处理、文本处理、图表展示、二维码工具等功能。 为了更直观展示项目效果&#xff0c;也给大家提供了在线体验地址&#xff1a;http://49.234.28.149, 源码资源见文末。 通过…

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 无效的绑定语句(未找到),就是写的sql 方法找不到sql。解决: 1 namespace 指向是否正确 路径与引用的方法的路径保持一致a.namespace 没有指向Dao b. id ,方法名没有对应上2 引用的方法…

记录Kettle连不上mysql8

如图所示&#xff0c;mysql升级到8了。 在很早之前&#xff0c;我一直用的是Mysql 5的驱动包去连接数据库&#xff0c;今天发现突然连接不上了&#xff0c;想了一下&#xff0c;应该是我以前升级mysql后的原因&#xff0c;换了mysql8的驱动后依旧没个卵用。 报错如下&#xff…

远程Debug远端服务器JVM配置

远程调试非本机的Java进程 远端Java进程启动的JVM参数 注意&#xff1a;以下配置尽量不要在线上生产环境开启&#xff0c;或者 JDK4: -Xdebug -Xrunjdwp:transportdt_socket,servery,suspendn,address{port} JDK5-JDK8: -agentlib:jdwptransportdt_socket,servery,suspen…

Python——LeetCode刷题——【383. 赎金信】

题目描述&#xff1a; 解题思路&#xff1a; 用字典记录字符串magazine中每个字符出现的次数。然后看看字典中magazine的各个字符的出现次数是否“够”字符串ransomNote中各个字符出现的次数。如果够&#xff0c;return True。如果存在有点字符不够&#xff0c;return False。…

学习:Python进阶 冒泡排序

#原理 列表每两个相邻的数,如果前面的数比后面的数大,则交换这两个数 一趟排序完成后,则无序曲减少一个数,有序区增加一个数 每循环一趟,从无序区冒出来一个最大的数,放入有序区,最终得到一个升序的列表