项目训练营第二天
项目训练营第二天
用户登录逻辑
1、账户名不少于4位
2、密码不少于8位
3、数据库表中能够查询到账户、密码
4、密码查询时用同样加密脱敏处理手段处理后再和数据库中取出字段进行对比,如果账户名未查询到,直接返回null
5、后端设置相应的脱敏后用户的session值,方便下一次访问时能够更快的到用户数据。
代码如下:
public User UserLogin(String userAccount, String password, HttpServletRequest request) {if (StringUtils.isAnyBlank(userAccount, password)) {return null;}if (userAccount.length() < 4) {return null;}if (password.length() < 8) {return null;}Pattern compile = Pattern.compile(".*[[ _`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|\\n|\\r|\\t].*");Matcher matcher = compile.matcher(userAccount);if (matcher.matches()) {return null;}String entryPassword = DigestUtils.md5Hex(SALT + password);QueryWrapper<User> mapperQuery = new QueryWrapper<>();mapperQuery.eq("userAccount", userAccount);mapperQuery.eq("password", entryPassword);User user = userMapper.selectOne(mapperQuery);if (user == null) {log.info("user Login error, userAccount cannot match password");return null;}User safetyUser = new User();safetyUser.setUsername(user.getUsername());safetyUser.setId(user.getId());safetyUser.setUserAccount(user.getUserAccount());safetyUser.setAvatarUrl(user.getAvatarUrl());safetyUser.setEmail(user.getEmail());safetyUser.setPhone(user.getPhone());safetyUser.setGender(user.getGender());safetyUser.setUserStatus(user.getUserStatus());safetyUser.setCreateTime(user.getCreateTime());request.getSession().setAttribute(USER_LOGIN_STATE, safetyUser);return safetyUser;}}
Session和cookie

request请求(HttpServletRequest request)
前端请求后端一般使用ajax(Asynchronous Javascript And XML,即是异步的JavaScript和XML),它可以异步地向服务器发送请求,在等待响应的过程中,不会阻塞当前页面。

- 简单来说,封装后都用request来请求后端,所以上面的参数中要加一个HttpServletRequest request,并且调用它的getSession函数取到Session类,再将它的Attribute类新增一个处于USER_LOGIN_STATE状态的具体用户类。
- Attribute本质上是一个Map类型的数据结构,用于存储Session
- USER_LOGIN_STATE是我们自定义的一个字符串,定义在UserService接口类中。
业务逻辑层构建
我们在项目中建一个名为service的文件夹,在该文件夹下面定义一个UserService.java存放如下的接口类。
用于实现注册逻辑、登录逻辑的函数->UserRegister、UserLogin函数都是这个接口的方法。

在service文件夹中再建一个impl文件夹,在里面建一个UserServiceImpl.java文件,用extends继承该接口,加上@Service注解表示这是业务逻辑层

我们要将之前生成的数据库操作类UserMapper作为一个成员放入到该类中,并加上@Resource注解,这样就可以自动调用连接上的数据库了。
tips
- @Slf4j是一个日志注解
- 密码加密的盐值SALT可自行定义
- 数据库需要在applications.yml里面配置,具体可参照网上文章来,以自行实践为准。
- 注解加上后报错需要在pom.xml中添加对应依赖,刷新maven后即可解决。
逻辑删除
Mybatis-plus配置时有一种逻辑删除的封装操作,该字段设置为1后即视为已被删除。
- 在applications.yml中配置代码如下:
global-config:db-config:logic-delete-field: isDelete # 全局逻辑删除字段名logic-delete-value: 1 # 逻辑已删除值logic-not-delete-value: 0 # 逻辑未删除值
- User实体类中设置为逻辑删除的字段前要加@TableLogic注解
也可自行上官网配置查阅
控制层Controller封装
- 按照SpringMVC控制层,视图层,处理层的封装逻辑,我们建一个名为Controller的文件夹,一个model.request文件夹。
- 后者存放接收请求的我们自定义的request类,前者存放调用业务逻辑层函数对request请求进行处理并返回数据的总的一个控制类。
- Model文件夹中还存放着User实体类,这个文件夹主要也就是用于存放些实体类
登录请求UserLoginRequest可以这么定义
@Data
public class UserLoginRequest implements Serializable {@Serialprivate static final long serialVersionUID = -543286974259314538L;private String userAccount;private String password;private String CheckPassword;
}
serrialVersionUID自动生成方法在昨天的笔记里。
注册请求UserRegisterRequest可以这么定义,两个request类定义分别放在一个和类名相同的java文件中
@Data
public class UserRegisterRequest implements Serializable {@Serialprivate static final long serialVersionUID = 3253980956799016230L;private String userAccount;private String password;private String CheckPassword;
}
- Data注解主要是放在一些实体类上,用于提供get、toString等方法。
相关文章:
项目训练营第二天
项目训练营第二天 用户登录逻辑 1、账户名不少于4位 2、密码不少于8位 3、数据库表中能够查询到账户、密码 4、密码查询时用同样加密脱敏处理手段处理后再和数据库中取出字段进行对比,如果账户名未查询到,直接返回null 5、后端设置相应的脱敏后用户的s…...
考研数学一有多难?130+背后的残酷真相
考研数学一很难 大家平时在网上上看到很多人说自己考了130,其实这些人只占参加考研数学人数的极少部分,有个数据可以展示出来考研数学到底有多难: 在几百万考研大军中,能考到120分以上的考生只有2%。绝大多数人的分数集中在30到…...
vue2脚手架笔记总结1
1.什么是组件 组件是实现局部代码和功能资源的集合 2.vue.config.js配置文件 使用vue inspect > output.js可以查看到Vue脚手架的默认配置,但是在这里面修改不会影响实际的配置,如果需要修改配置需要使用用vue.config.js文件,详情见:https://cli.vuej…...
校园巡礼:一周只上四天课,入学即发钱?深圳理工大学,开局即王炸
校园巡礼 | 一周只上四天课,入学即发钱?深圳理工大学,开局即王炸! 会议之眼 快讯 目前各省的高考成绩现已陆续揭晓,广东省教育考试院发布了2024年高考录取最低分数线,物理类本科线为442分,历史…...
免交互 实验
免交互 交互:我们发出指令控制程序的运行,程序在接收到指令之后按照指令的效果做出对应的反应。 免交互:间接的,通过第三方的方式把指令传送给程序,不用直接下达指令。 Here document 免交互 这是命令行格式&#…...
Sublime Text 设置
备份 {"font_size": 10,"index_files": true,"font_face": "Courier New","vintage_start_in_command_mode": false,"ignored_packages": ["Vintage"],"word_wrap": "false" }关闭…...
spire.Pdf 将pdf转成image
一、nuget安装 <ItemGroup><PackageReference Include"Spire.PDF" Version"10.6.7" /></ItemGroup> 二、直接上代码 using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.IO;namespace …...
仓颉编程语言 -- 初识(一)
官网 文档 原生智能化 内嵌AgentDSL的编程框架,自然语言&编程语言有机融合;多Agent协同,简化符号表达,模式自由组合,支持各类智能应用开发。 天生全场景 轻量化可缩放运行时,模块化分层设计…...
前端JS必用工具【js-tool-big-box】学习,数值型数组的正向排序和倒向排序
这一小节,我们说一下前端 js-tool-big-box 这个工具库,添加的数值型数组的正向排序和倒向排序。 以前呢,我们的数组需要排序的时候,都是在项目的utils目录里,写一段公共方法,弄个冒泡排序啦,弄…...
python web框架哪家强?Flask、Django、FastAPI对比
前言 当你掌握了python的基础知识,并且会用和HTML和CSS编写简单的静态网页。现在你只需再掌握一个python web框架的知识,就可以开始编写一个动态的网站了。目前市面比较流程的python web框架有三个flask、Django、FastAPI。接下来我们对比一下。他们三个…...
Mybatis plus:IService接口
一、介绍 在MybatisPlus框架中,IService接口扮演着重要的角色。作为一个通用的服务接口,IService定义了一系列方法,包括查询、插入、更新、删除等。这些方法的定义使得在服务层进行数据库操作变得更为便捷和高效。 IService 接口是一个泛型接…...
时序分析基本概念介绍——min pulse width 最小脉冲宽度
文章目录 前言一、什么是 min pulse width?二、为什么检查 min pulse width?三、如何设置 min pulse width约束?1. 在sdc里面定义2. library里面定义 四、如何检查 min pulse width?五、如何修复 min pulse width?总结…...
PHP原生代码生成pdf---解决中文乱码问题
github地址 尝试了使用composer下载FPDF或者FPDI,但是无法解决中文乱码问题。只有使用这个github上的中文包才可以,那俩没必要下。 直接上代码(这里并没有使用任何框架) require(./fpdf/chinese.php);//生成pdf$pdf new PDF_Chinese();$pdf->AddPage…...
智慧车库管理系统
摘 要 随着城市化进程的不断加快,私家车数量的快速增长给城市交通带来了巨大的挑战,停车问题成为城市交通管理中的一大难题。车辆停车时,在停车场寻找停车位耗时过久,不仅仅浪费用户的时间,还可能引起交通拥堵。城市停…...
每日新闻掌握【2024年6月26日 星期三】
2024年6月26日 星期三 农历五月廿一 大公司/大事件 OpenAI将终止对中国提供API服务 从6月24日晚间开始,已有多名用户收到了来自OpenAI的邮件。该邮件表示,“我们的数据显示您的组织来自OpenAI目前不支持的地区的API流量。”邮件进一步表示,…...
InVEST实践及在生态系统服务供需、固碳、城市热岛、论文写作等实际项目中应用
白老师(研究员):长期从事生态系统结构-格局-过程-功能-服务的变化与响应关系等研究工作,重点围绕生物多样性、生态系统服务与价值等,构建生物地球化学模型和评价指标体系,为城市、区域和自然保护区的可持续发展和生态环…...
慧科新闻搜索研究数据库的使用指南及个人获取途径
《慧科新闻搜索研究数据库》WiseSearch由慧科讯业有限公司出品。WiseSearch是具有新闻搜索/浏览、对比分析等功能的一站式新闻搜索平台;内容包括1200种报刊和8000 网站的新闻资讯,平面媒体涵盖全国综合大报、党委机关报、都市报、行业报刊媒体࿰…...
SpringBoot学习03-[Spring Boot与Web开发]
Spring Boot与Web开发 RestTemplateMockMvc在SPringBoot中使用 SpringBoot整合swagger2SpringBoot的springmvc自动配置底层原理包含ContentNegotiatingViewResolver和BeanNameViewResolverContentNegotiatingViewResolverBeanNameViewResolver 支持提供静态资源,包括…...
数据恢复篇:如何恢复丢失的Android短信?
许多用户发现自己处于重要短信意外从Android手机中删除的情况。幸运的是,有一些行之有效的方法可以在没有root的情况下恢复已删除的短信Android,这可以成为救命稻草。这些技术不需要深厚的技术知识,也不需要损害设备的安全性。为了帮助您摆脱…...
数据结构历年考研真题对应知识点(栈)
目录 3.1栈 3.1.1栈的基本概念 【栈的特点(2017)】 【入栈序列和出栈序列之间的关系(2022)】 【特定条件下的出栈序列分析(2010、2011、2013、2018、2020)】 3.1.2栈的顺序存储结构 【出/入栈操作的模拟(2009)】 3.1栈 3.1.1栈的基本概念 【栈…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
