从0到1开发测试平台(六)增加登录接口

时间:2022-07-22
本文章向大家介绍从0到1开发测试平台(六)增加登录接口,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

上篇文章我们了解了resultful相关知识,因此我们需要修改UserController,增加接口版本号,在类上面增加注解@RequestMapping("/api/v1/user"),修改之后UserController如下所示

package com.caomingyu.cctestplatform.controller;

import com.caomingyu.cctestplatform.bean.User;
import com.caomingyu.cctestplatform.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/api/v1/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/queryUser")
    public List<User> queryUser(){
        List<User> userList = userService.queryUserList();
        return userList;
    }
}

登录功能如果是上线系统需要考虑的点比较多,比如认证和授权,登录密码错误超过3次弹出图形验证码,超过5次锁定账号一小时,单点登录,加密方式比如2次md5加密加盐或者aes加密等等,登录成功之后登录信息存到操作日志和登录表等等,在这里我们用最小白的方式来做登录功能。

接下来我们就来新增登录接口

登录接口我们采用post请求方式,需要传入json格式User对象,所以我们的入参需要加上@RequestBody对象,否则,前端传入的参数后端无法接受,会出现接受的参数为空的情况。

这里我们对密码只做了一次md5加密处理,增加util包,新增Md5加密类Md5Utils.java

package com.caomingyu.cctestplatform.util;

import java.security.MessageDigest;

public class Md5Utils {
    /***
     * MD5加码 生成32位md5码
     */
    public static String string2MD5(String inStr){
        MessageDigest md5 = null;
        try{
            md5 = MessageDigest.getInstance("MD5");
        }catch (Exception e){
            System.out.println(e.toString());
            e.printStackTrace();
            return "";
        }
        char[] charArray = inStr.toCharArray();
        byte[] byteArray = new byte[charArray.length];

        for (int i = 0; i < charArray.length; i++)
            byteArray[i] = (byte) charArray[i];
        byte[] md5Bytes = md5.digest(byteArray);
        StringBuffer hexValue = new StringBuffer();
        for (int i = 0; i < md5Bytes.length; i++){
            int val = ((int) md5Bytes[i]) & 0xff;
            if (val < 16)
                hexValue.append("0");
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();

    }
}

UserMapper.xml增加登录校验用户的sql

<select id="queryUserByName" resultType="com.caomingyu.cctestplatform.bean.User">
      select * from user where username = #{userName}
    </select>

UserDao.java增加queryUserByName方法

User queryUserByName(String userName);

UserService.java增加queryUserByNamehe和login方法

User queryUserByName(String userName);
Integer login(String userName,String password);

UserServiceImpl.java增加queryUserByNamehe和login方法

@Override
    public User queryUserByName(String userName) {
        return userDao.queryUserByName(userName);
    }

    @Override
    public Integer login(String userName, String password) {
        User user = queryUserByName(userName);
        if (user == null){
            return -1;
        }
        String passwordParam = Md5Utils.string2MD5(password);
        if (!passwordParam.equals(user.getPassword())){
            return -1;
        }
        return 0;
    }

UserController.java增加login方法

@PostMapping("/login")
    public String login(@RequestBody User user){
        if (user == null){
            return "登录失败";
        }
        if (user.getUserName() == null || "".equals(user.getUserName())){
            return "登录失败";
        }
        if (user.getPassword() == null || "".equals(user.getPassword())){
            return "登录失败";
        }
        Integer result = userService.login(user.getUserName(), user.getPassword());
        if (result == -1){
            return "登录失败";
        }
        return "登录成功";
    }

我们打开postman大概测试下,用户名存在的账号:13012345678,密码:123456,如下

用户名和密码都不对

用户名正确/密码错误

用户名/密码正确

以上只是对主要流程进行大致验证,并没有对用户名密码长度做校验,参数也没用加解密,如果你有需要可以自己尝试做下,下一篇后端的文章会对登录接口做优化,我们这里还是有不少问题的。