上篇文章我们了解了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 queryUser(){ List 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 * from user where username = #{userName}
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,如下
用户名和密码都不对
用户名正确/密码错误
用户名/密码正确
以上只是对主要流程进行大致验证,并没有对用户名密码长度做校验,参数也没用加解密,如果你有需要可以自己尝试做下,下一篇后端的文章会对登录接口做优化,我们这里还是有不少问题的。
从0到1开发测试平台(五)RESTful API接口设计标准及规范
从0到1开发测试平台(四)Controller+Service +Dao三层的功能划分
从0到1开发测试平台(三)利用vue cli创建前端vue项目
从0到1开发测试平台(二)springboot搭建常见问题
带你用java从0到1开发测试平台