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.mzph.cn/pingmian/54680.shtml

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

相关文章

Agile Modbus STM32裸机移植 从机使用

本教程手把手教你实现Agile Modbus,照抄就能成。 并且会解读函数功能含义。 1. 引言 Agile Modbus 是一个轻量级的 Modbus 协议栈,可以满足用户在任何场景下的需求。 功能 支持 rtu 和 tcp 协议,使用纯 C 语言开发,不涉及任何硬件接口,可以直接在任何形式的硬件上使用。由…

序列化与反序列化深入分析:UUID案例的实践与JSON转换对比

在Java开发中&#xff0c;序列化和反序列化是非常重要的概念。序列化是将对象的状态转换为字节流的过程&#xff0c;而反序列化则是将字节流恢复为对象的过程。本文将以UUID序列化案例和JSON转换为例&#xff0c;深入探讨这两者的具体实现及应用场景。 1. Java 序列化与反序列化…

深入理解Spring Data JPA与接口编程

目录 1. 什么是Spring Data JPA&#xff1f; 2. 如何使用Spring Data JPA&#xff1f; 3. 示例代码 4. 使用Query注解 5. 拓展知识&#xff1a;接口编程的好处 6. 结论 在软件开发领域&#xff0c;接口&#xff08;Interface&#xff09;是一种定义了方法签名但没有实现的…

Fyne ( go跨平台GUI )中文文档-小部件 (五)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…

给子组件传递dom元素引用实例方案

在实际开发中有一个比较常见的场景是&#xff0c;父组件写了一个el-form组件。然后里面内容很多&#xff0c;所以拆成了子组件。那么子组件中就有调用父组件的form实例方法的需求。到所以这就涉及一个问题&#xff0c;怎么把父组件的form实例传递给子应用。 这里传递后直接调用…

任意长度并行前缀和 扫描算法 《PMPP》笔记

下面的算法针对于任意长度输入 对于大数据集&#xff0c;首先将输入分为几段&#xff0c;每一段放进共享内存并用一个线程块处理&#xff0c;比如一个线程块使用1024个线程的话&#xff0c;每个块最多能处理2048个元素。 在前面代码中&#xff0c;一个块最后的执行结果保存到了…

数据结构:单链表实现信息管理

一、函数声明部分 #ifndef __LINK_H__ #define __LINK_H__ #include <myhead.h> typedef struct Link1 {union{int len;//用于头结点&#xff0c;统计节点个数int data;//用于正常节点&#xff0c;存储数据};struct Link1 *next;//指针域 }Link,*Plink;/**********函数声…

【JS】函数柯里化

固定某些参数&#xff0c;返回接受剩余参数的新函数&#xff0c;如果没有剩余参数&#xff0c;就调用。 将多个参数的函数转换为单个参数的函数 作用&#xff1a;参数复用&#xff0c;延迟计算… // 传入参数不限&#xff0c;不能丢失传入的参数 function add() {// 不设置形参…

C\C++内存管理详解

本次内容大纲&#xff1a; 1.C/C内存分布 大家看看下面的代码 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";char* pChar3 "abcd";int…

【Unity】检测鼠标点击位置是否有2D对象

在这里提供两种方案&#xff0c;一种是射线检测&#xff0c;另一种是非射线检测。 初始准备步骤&#xff1a; 创建2D对象&#xff08;比如2D精灵&#xff09;给要被检测的2D对象添加2D碰撞体&#xff08;必须是2D碰撞体&#xff09;创建一个空对象&#xff0c;再创建一个检测…

echarts图表刷新

图表制作完成&#xff0c;点击刷新图标&#xff0c;可以刷新。 <div class"full"><div id"funnel" class"normal"></div><div class"refreshs"><div class"titles_pic"><img src"./…

nginx+keepalived健康检查案例详解(解决nginx出现故障却不能快速切换到备份服务器的问题)

文章目录 简介配置过程前置环境请看创建健康检查脚本结果测试 简介 在我们通过nginxkeepalived实现高可用后&#xff0c;会发现nginx出现故障的时候keepalived并不会将虚拟ip切换到备份服务器上其原理就是nginx和keepalived是两个独立的服务&#xff0c;Nginx的故障状态不会触…

微信小程序-分包加载

文章目录 微信小程序-分包加载概述基本使用打包和引用原则独立分包分包预下载 微信小程序-分包加载 概述 小程序的代码通常是由许多页面、组件以及资源等组成&#xff0c;随着小程序功能的增加&#xff0c;代码量也会逐渐增加&#xff0c;体积过大就会导致用户打开速度变慢&a…

QT——多线程操作

一、单线程和多线程的区别 单线程指的是程序在执行时只有一个流程,也就是一次只能执行一个任务。当程序中某个任务需要花费大量时间时,单线程会导致整个程序阻塞,用户体验会变差。 多线程则是指程序在执行时可以同时执行多个任务,每个任务都是一个独立的线程。多线程可以…

数字IC设计\FPGA 职位经典笔试面试整理--语法篇 Verilog System Verilog(部分)

注&#xff1a; 资料都是基于网上一些博客分享和自己学习整理而成的 Verilog 1. 数据类型 Verilog一共有19种数据类型 基础四种数据类型&#xff1a;reg型&#xff0c;wire型&#xff0c;integer型&#xff0c;parameter型 reg型   reg类型是寄存器数据类型的关键字。寄存…

Spring Boot 点餐系统:您的餐饮助手

第三章 系统分析 3.1 系统设计目标 网上点餐系统主要是为了用户方便对美食信息、美食评价、美食资讯等信息进行查询&#xff0c;也是为了更好的让管理员进行更好存储所有数据信息及快速方便的检索功能&#xff0c;对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定…

Firefox火狐浏览器web开发调试开启强制刷新缓存模式

场景:vuetoken过期或者修改token后&#xff0c;刷新后进不去系统! 解决&#xff1a; 火狐浏览器缓存难清理&#xff0c;用CtrlF5 CtrlR 等在谷歌和IE浏览器的快捷键没用。 火狐清理缓存比较麻烦&#xff0c;默认快捷键 Ctrl Shift Del 键是弹窗选择性清理&#xff0c;还要…

Spring、SpringBoot 框架功能学习

一. Spring核心功能 依赖注入&#xff08;DI&#xff09;&#xff1a;Spring的核心功能是通过依赖注入来管理对象之间的依赖关系。依赖注入是一种将对象的依赖关系注入到被依赖对象中的机制&#xff0c;它可以帮助降低对象之间的耦合度&#xff0c;使得代码更容易维护和测试。 …

springboot接入emqx的mqtt

需求背景 物联网设备需要通过mqtt协议传输,这里记录一下,注意,这篇文章不能接入阿里云的mqtt,本人已经试过,会报错。 开发教程 1、EMQX安装部署 -- 1 安装必要的依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2-- 2 设置repo库 sudo yum-confi…

原腾讯云AI产品线项目经理李珊受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 原腾讯云AI产品线项目经理、资深项目管理专家李珊女士受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为&#xff1a;AI助力项目经理的决策支持系统。大会将于10月26-27日在北京举办…