接着上篇博客学习。上篇博客是已经基本完成用户模块的注册接口的开发以及注册时的参数合法性校验。具体往回看了解的链接如下。
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)当用户名输入正确,而密码错误时。