springboot实战学习笔记(5)(用户登录接口的主逻辑)

接着上篇博客学习。上篇博客是已经基本完成用户模块的注册接口的开发以及注册时的参数合法性校验。具体往回看了解的链接如下。

springboot实训学习笔记(4)(Spring Validation参数校验框架、全局异常处理器)-CSDN博客文章浏览阅读576次,点赞7次,收藏12次。本篇博客主要是关于用户模块的"注册“的后端接口测试的"参数校验问题"。其中主要提到了手动校验参数、利用参数校验框架(Spring Validation)校验参数、以及参数校验失败时的异常消息返回处理(全局异常处理器:"GlobalExceptionHandler")等等.....https://blog.csdn.net/m0_74363339/article/details/142316018?spm=1001.2014.3001.5501这篇博客主要完成用户模块的登录接口的主逻辑开发。这篇开发第二个接口——>登录。有关于"jwt token令牌"后面学习。

目录

一、用户登录接口的需求

(1)大致需求如下。

二、接口文档中登录的说明

(1)基本信息(请求路径、请求方式)

(2)请求参数

(3)响应数据

三、用户登录接口的实现思路

四、UserController类的主体逻辑代码实现(注册、登录)

五、在postman测试工具进行登录主逻辑测试

(1)数据库中已注册的用户

(2)当用户名输入错误时。

(3)当用户名输入长度小于5时。

(4)当用户名输入正确,且密码也正确时。

​编辑

(5)当用户名输入正确,而密码错误时。


一、用户登录接口的需求

(1)大致需求如下。
  • 用户在登录界面输入用户名还有密码,点击登录按钮。然后访问我们后台的登录接口。
  • 如果登录成功,则跳转到首页。
  • 如果登录失败,给出对应的提示。

二、接口文档中登录的说明

(1)基本信息(请求路径、请求方式)

(2)请求参数

注意请求参数的格式是urlencoded

(3)响应数据

注意响应数据的格式是JSON格式

  • code、message之前在注册接口文档中了解过。
  • 而这里的"data"。它是String类型的。它是jwt(JSON Web Token)令牌。
  • 关于备注说明中提到的JWT令牌后面再学习,这篇博客主要完成登录的主体逻辑

三、用户登录接口的实现思路

  • 在UserController层里面添加一个方法login()。方法上添加注解@PostMapping("/login")。方法里需要接收浏览器传来的两个参数,也是一样运用validation参数校验框架对两个参数进行合法性校验。
  • login()方法内部做三件事。根据用户名查询user、判断是否查询到、判断密码是否正确。

  • UserService层、UserMapper层提供对应的操作方法。而根据用户名查询用户在注册接口里面已经写过,所以重点去写UserController层里面的代码。

四、UserController类的主体逻辑代码实现(注册、登录)

具体注意事项可以看代码注释

package com.feisi.controller;import com.feisi.pojo.Result;
import com.feisi.pojo.User;
import com.feisi.service.UserService;
import com.feisi.utils.Md5Util;
import jakarta.validation.constraints.Pattern;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Title: UserController* @Author HeYouLong* @Package com.feisi.controller* @Date 2024/9/17 下午1:51* @description:*/
@RestController
@RequestMapping("/user")
@Validated
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/register")public Result register(@Pattern(regexp = "^\\S{5,16}$") String username,@Pattern(regexp = "^\\S{5,16}$") String password) {//查询用户User user = userService.findByName(username);if(user==null){//没有占用//注册userService.register(username,password);return Result.success();}else {//被占用return Result.error("用户名已被占用");}}@PostMapping("/login")public Result<String> login(@Pattern(regexp = "^\\S{5,16}$") String username,@Pattern(regexp = "^\\S{5,16}$") String password) {//根据用户名查询用户User loginUser = userService.findByName(username);//判断该用户是否存在if(loginUser==null){return Result.error("用户名错误");}//如果存在,判断密码是否正确//注意loginUser返回的用户的password是以密文返回的//所以需要对参数里的password先加密再与查询得来的password进行比较if(Md5Util.getMD5String(password).equals(loginUser.getPassword())){//登录成功//这里的jwt还未实现return Result.success("jwt token令牌");}return Result.error("密码错误");}
}

五、在postman测试工具进行登录主逻辑测试

后面还有补充的逻辑在后面学习!并且目前该逻辑存在安全性隐患!

(1)数据库中已注册的用户

这里的密文密码对应的明文密码是:"123456"


(2)当用户名输入错误时。

(3)当用户名输入长度小于5时。

(4)当用户名输入正确,且密码也正确时。
(5)当用户名输入正确,而密码错误时。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java免税商品购物商城:Spring Boot实现详解

第一章 绪论 1.1 课题开发的背景 从古至今&#xff0c;通过书本获取知识信息的方式完全被互联网络信息化&#xff0c;但是免税商品优选购物商城&#xff0c;对于购物商城工作来说&#xff0c;仍然是一项非常重要的工作。尤其是免税商品优选购物商城&#xff0c;传统人工记录模式…

【Proteus仿真】基于51单片机的L298N电机电速调节

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;L298N电机驱动连接电机&#xff0c;采用调节PWM占空比来控制电机速度转动。 仿真图&#xff1a; 编辑 二、硬件资源 基于KEIL5编写C代码&#xff0c;PROTEUS8.15进行…

SQL - 进阶语法(一)

1. SELECT TOP SELECT TOP Number|Percentage column1 from ... 选择所需要的数据的前多少行&#xff0c;Number表示具体数值&#xff0c;Percentage表示百分比 2. LIKE 搜索列元素的指定模式&#xff0c;匹配对应的信息进行自定义搜索 通常需要搭配通配符进行使用 %替代…

Postman cURL命令导入导出

导入cURL命令 cURL是一种用于发出HTTP请求的流行命令行工具。在测试Web应用程序或API时&#xff0c;cURL使您能够直接从命令行进行交互&#xff0c;使用API开发人员社区中常见的完善语法。如果在不同的地方有多个cURL命令&#xff0c;可以将它们导入Postman。 ​ 将cURL命令导入…

1.5 计算机网络的分层结构

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言1 分层设计2 网络体系结构2.1 基本概述2.2 常见的三种网络体系结构 3 各层之间的关系3.1 水平关系3.2 垂直关系 4 数据传输过程4.1 水平视角4.2 垂直视角 前言 在当今数字…

【推广】图书|2024新书《大模型RAG实战:RAG原理、应用与系统构建》汪鹏、谷清水、卞龙鹏等,机械工业出版社

探索RAG系统新高度&#xff1a;《大模型RAG实战&#xff1a;RAG原理、应用与系统构建》 随着大模型技术的爆发&#xff0c;尤其是ChatGPT之后&#xff0c;以ChatPDF为首的知识库问答产品迅速走红&#xff0c;引发了RAG&#xff08;检索增强生成&#xff09;系统的广泛关注与讨论…

EfficientFormer实战:使用EfficientFormerV2实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

macOS平台编译libidn2库给iOS及macOS用

1.克隆源码: git clone https://gitlab.com/libidn/libidn2.git --recursive 2.安装依赖库: pkg-config也要安装 3.启动bootstrap生成configure 配置成功 configure生成成功

TikTok提示“Network is out of reach”怎么处理?

当TikTok提示“Network is out of reach”时&#xff0c;意味着应用无法连接到互联网。导致这一问题的常见原因包括网络连接不稳定、地理限制或网络设置与应用不兼容等。解决方法有&#xff1a;拔除手机卡、关闭手机定位服务、切换至稳定的海外IP网络等。使用TikTok专用网络也可…

数据结构字节对齐

求 sizeof(name1)&#xff1f;(晟安信息) struct name1{ char str; short x; int num; }; 8 分析&#xff1a;char 1字节&#xff0c;short 2字节&#xff0c;int 4字节&#xff1b;所以以4字节为一个步长&#xff0c;需要2步长&#xff0c;所以sizeof(name1)为8。 (电工时代) …

C++入门基础知识79(实例)——实例 4【求商及余数】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 实例 【求商及余数】相关内容&#xf…

【Go】Go 环境下载与安装教程(Windows系统)

引言 Go&#xff0c;也被称为Golang&#xff0c;是一种静态类型&#xff0c;编译型的编程语言&#xff0c;由Google设计和开发。Go语言的设计目标是“解决软件开发中的一些问题”&#xff0c;特别是在大规模软件系统的构建和维护方面。 下载安装包 打开官网下载页面&#xff…

查找算法 03散列查找

自己设计一个散列表&#xff0c;总长度由你决定&#xff0c;并设计一个合理的散列函数&#xff0c;使用线性探测法解决冲突 基于上述散列表&#xff0c;设计不少于10个元素的插入序列&#xff0c;依次插入散列表&#xff0c;画出散列表最终的样子&#xff08;插入过程至少发生…

javase复习day29 io

高级流 缓冲流效率较高。 字节缓冲流 public class Demo1 {public static void main(String[] args) throws IOException {BufferedInputStream bis new BufferedInputStream(new FileInputStream("javaseday29\\a.txt"));BufferedOutputStream bos new BufferedO…

Python | Leetcode Python题解之第424题替换后的最长重复字符

题目&#xff1a; 题解&#xff1a; class Solution:def characterReplacement(self, s: str, k: int) -> int:num [0] * 26n len(s)maxn left right 0while right < n:num[ord(s[right]) - ord("A")] 1maxn max(maxn, num[ord(s[right]) - ord("…

安卓数据存储——SQLite

一、SQLite数据库 创建表 CREATE TABLE IF NOT EXISTS user_info (_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,name VARCHAR NOT NULL,age INTEGER NOT NULL,height LONG NOT NULL,weight FLOAT NOT NULL);注&#xff1a; IF NOT EXISTS&#xff1a;如果该表不存在则创…

后端:理解与创建项目

理解 项目得放到tomcat中才能运行 &#xff0c;所以请求不是到服务端&#xff0c;是到具体的项目里的服务生里(servlet)。 servlet能够响应接受请求。 用jqueryajax发出请求 请求&#xff08;请求路径-->找到服务生&#xff09;&#xff0c; 请求方式&#xff08;get/post&…

【深入理解SpringCloud微服务】深入理解nacos配置中心(六)——spring-cloud-context关于配置刷新的公共逻辑

【深入理解SpringCloud微服务】深入理解nacos配置中心&#xff08;六&#xff09;——spring-cloud-context关于配置刷新的公共逻辑 原理分析源码解析RefreshEventListener#onApplicationEvent(ApplicationEvent)ContextRefresher#refresh()ContextRefresher#refreshEnvironmen…

Spring IDEA 2024 安装Lombok插件

1.简介 Lombook插件的Data标签可以自动生成类的get和set以及toString方法。 2.安装步骤 在idead设置的插件中搜索lombok插件&#xff0c;安装。 在Spring项目的pom.xml中添加依赖项 <dependency><groupId>org.projectlombok</groupId><artifactId…

2024年研赛 C、D、F三题论文首发+部分代码分享

本届研赛助攻题目 C D F三题论文均已经全部完成。后更新计划 如图所示。 免费给大家分享 三个问题的论文部分代码 2024年华为杯-研赛分享资料&#xff08;论文部分代码&#xff09;&#xff08;已更新部分代码&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com…