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

news2024/9/22 13:30:48

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

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 {

    @Autowired
    private 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.coloradmin.cn/o/2155166.html

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

相关文章

[云服务器13] 如何正确选择云服务器?

【非广告&#xff0c;仅提供建议&#xff0c;没有强制消费引导】 这期我们不讲搭建教程了&#xff0c;因为我想到前面12篇的教程&#xff0c;有关套餐配置的教程好像都有点敷衍…… 所以这期我们主要来说一说服务器的配置选择和不同配置的应用场景。 网站: 雨云 打开后&…

Cisco 基础网络汇总

⭕个人主页 可惜已不在 ⭕可以分享给身边有需要的人 ⭕有用的话就留下一个三连吧 目录 前言: 一.网络及网络设备认识 二. 二层网络 三. 生成树、端口 四. 三层网络 五.访问控制 六.NAT 七.DHCP 八.PPP 九.帧中继 十.热备份 十一.综合实验 十二.WLAN 十三.Cisco P…

Compiler Explorer 开源项目-在线编译器网站

Compiler Explorer 开源项目&#xff0c;一个交互式编译器探索网站。在 C、C、C♯、F♯、Rust、Go、D、Haskell、Swift、Pascal、ispc、Python、Java 或其他 30 多种支持的语言组件中编辑代码&#xff0c;并实时查看不同编译器&#xff08;包括不同cpu架构&#xff09;编译后的…

STM32—MPU6050

1.MPU6050简介 MPU6050是一个6轴姿态传感器可以测量芯片自身X、Y、Z轴的加速度、角速度参数&#xff0c;通过数据融合&#xff0c;可进一步得到姿态角&#xff0c;常应用于平衡车、飞行器等需要检测自身姿态的场景3轴加速度计(Accelerometer&#xff1a;测量X、Y、Z轴的加速度3…

构建未来企业的理论基石:业务能力建模指南的深度解析与战略实施框架

数字化转型已经成为全球企业的战略焦点&#xff0c;在这个过程中&#xff0c;如何有效地将复杂的业务需求、技术架构和市场变化结合&#xff0c;形成具备长期竞争力的企业能力框架&#xff0c;是企业成败的关键。《业务能力指南》提供了一套经过验证的理论体系&#xff0c;帮助…

数字图像面积计算一般方法及MATLAB实现

一、引言 在数字图像处理中&#xff0c;经常需要获取感兴趣区域的面积属性&#xff0c;下面给出图像处理的一般步骤。 1.读入的彩色图像 2.将彩色图像转化为灰度图像 3.灰度图像转化为二值图像 4.区域标记 5.对每个区域的面积进行计算和显示 二、程序代码 %面积计算 cle…

《COMMA: Co-articulated Multi-Modal Learning》中文校对版

系列论文研读目录 文章目录 系列论文研读目录摘要导言相关工作视觉语言模型提示学习视觉语言模型中的提示学习 方法准备工作提议方法 实验基准设定基础到新的概括跨数据集传输消融实验 结论 摘要 经过预训练的大规模视觉语言模型&#xff08;如CLIP&#xff09;已经在一系列下…

PyQt5 导入ui文件报错 AttributeError: type object ‘Qt‘ has no attribute

问题描述&#xff1a; 利用 PyQt5 编写可视化界面是较为普遍的做法&#xff0c;但是使用全新UI版本的 Pycharm 修改之前正常的UI文件时&#xff0c;在没有动其他代码的情况下发现出现以下报错 AttributeError: type object Qt has no attribute Qt::ContextMenuPolicy::Defaul…

BFS 解决多源最短路问题

文章目录 多源BFS542. 01 矩阵题目解析算法原理代码实现 1020. 飞地的数量题目解析算法原理 1765. 地图中的最高点题目解析算法原理代码实现 1162. 地图分析题目解析算法原理代码实现 多源BFS 单源最短路&#xff1a; 一个起点、一个终点 多源最短路&#xff1a; 可以多个起点…

Apache ZooKeeper 及 Curator 使用总结

1. 下载 官网地址&#xff1a;Apache ZooKeeper 点击下载按钮 选择对应的版本进行下载 2. 使用 1、解压 tar -zxf apache-zookeeper-3.9.2-bin.tar.gz2、复制配置文件&#xff0c;有一个示例配置文件 conf/zoo_sample.cfg&#xff0c;此文件不能生效&#xff0c;需要名称为…

LeetCode_sql_day31(1384.按年度列出销售总额)

目录 描述 1384.按年度列出销售总额 数据准备 分析 法一 法二 代码 总结 描述 1384.按年度列出销售总额 Product 表&#xff1a; ------------------------ | Column Name | Type | ------------------------ | product_id | int | | product_name | var…

将sqlite3移植到arm开发板上:

一、下载源代码 sqlite3网址&#xff1a;https://www.sqlite.org/download.html 下载&#xff1a;sqlite-autoconf-3460100.tar.gz 二、解压 在Linux家目录下创建一个sqlite3文件夹&#xff0c;将压缩包复制到该文件夹下&#xff0c;再在该目录下打开一个终端&#xff0c;执行…

【机器学习】--- 决策树与随机森林

文章目录 决策树与随机森林的改进&#xff1a;全面解析与深度优化目录1. 决策树的基本原理2. 决策树的缺陷及改进方法2.1 剪枝技术2.2 树的深度控制2.3 特征选择的优化 3. 随机森林的基本原理4. 随机森林的缺陷及改进方法4.1 特征重要性改进4.2 树的集成方法优化4.3 随机森林的…

7-50 畅通工程之局部最小花费问题 (kruskal)

输入样例: 4 1 2 1 1 1 3 4 0 1 4 1 1 2 3 3 0 2 4 2 1 3 4 5 0输出样例: 3 代码&#xff1a; #include<iostream> #include<queue> using namespace std; const int N110; struct node{int x,y,w;bool operator <(const node &n1)const{if(wn1.w) retur…

4 html5 web components原生组件详细教程

web components 前面我们已经介绍过&#xff0c;这一期我们就来讲一讲具体用法和这其中的关键只是点&#xff1a; 1 基本使用 如果我们想实现一个封装的原生组件&#xff0c;那就离不开使用js去封装&#xff0c;这里主要就是基于HTMLElement这个类&#xff0c;去创建创建一个…

【HarmonyOS】深入理解@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

【HarmonyOS】深入理解Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 前言 之前就Observed和ObjectLink写过一篇讲解博客【HarmonyOS】 多层嵌套对象通过ObjectLink和Observed实现渲染更新处理&#xff01; 其中就Observe监听类的使用&#xff0c;Object…

prometheus监控linux虚拟机

前提条件已安装好prometheus和grafana&#xff0c;如果未安装请移步到docker部署prometheus 安装部署Prometheus,docker安装grafana安装部署Grafana。 1.二进制部署node-exporter采集器 2.1 采集器node-exporter下载 链接&#xff1a;https://pan.baidu.com/s/1hDmckSSl5X36…

【算法】BFS系列之 拓扑排序

【ps】本篇有 3 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;课程表 .1- 题目解析 .2- 代码编写 2&#xff09;课程表 II .1- 题目解析 .2- 代码编写 3&#xff09;火星词典 .1- 题目解析 .2- 代码编写 一、算法简介 【补】图的基本概念 &#…

本地提权【笔记总结】

文章目录 服务命令at命令提权介绍适用版本复现 sc命令提权介绍适用版本复现 ps应用程序提权复现 进程注入进程迁移注入介绍条件复现 MSF自动化注入介绍getsystem原理 复现 MSF令牌窃取介绍复现 烂土豆提权介绍适用版本复现 UAC绕过介绍复现使用ask模块绕过使用bypassuac_sluihi…

谷歌的AI反击战:创始人谢尔盖·布林的回归与大模型组合的未来

近年来&#xff0c;随着AI技术的迅猛发展&#xff0c;尤其是ChatGPT等大语言模型的出现&#xff0c;全球科技格局正发生剧烈变化。作为曾经引领AI潮流的谷歌&#xff0c;在这场竞争中逐渐失去了领头羊的地位。然而&#xff0c;谷歌的创始人之一谢尔盖布林&#xff08;Sergey Br…