目录
[1.1 顺序图](#1.1 顺序图)
[1.2 参数要求](#1.2 参数要求)
[1.3 接口规范](#1.3 接口规范)
[1.4 实现流程](#1.4 实现流程)
[6. Controller实现方法对外提供API接口](#6. Controller实现方法对外提供API接口)
1.登录
1.1 顺序图

1.2 参数要求

1.3 接口规范

1.4 实现流程
1.编写SQL
2.dao层接口

3.定义Service接口
/**
* 根据用户名查询用户信息
* @param username 用户名
* @return 用户信息
*/
User selectByUserName(String username);
/**
* 处理用户登录
* @param username 用户名
* @param password 密码
* @return 用户信息
*/
User login(String username,String password);
4.实现Service接口


/**
* 根据用户名查询用户信息
*
* @param username 用户名
* @return 用户信息
*/
@Override
public User selectByUserName(String username) {
// 1.非空校验
if(StringUtils.isEmpty(username)) {
// 打印日志
log.warn(ResultCode.FAILED_PARAMS_VALIDATE.toString());
// 抛出异常, 统一抛出 ApplicationException
throw new ApplicationException(AppResult.failed(ResultCode.FAILED_PARAMS_VALIDATE));
}
// 返回查询结果
return userMapper.selectByUserName(username);
}
/**
* 处理用户登录
*
* @param username 用户名
* @param password 密码
* @return 用户信息
*/
@Override
public User login(String username, String password) {
// 1.非空校验
if(StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
// 打印日志
log.warn(ResultCode.FAILED_PARAMS_VALIDATE.toString());
// 抛出异常, 统一抛出 ApplicationException
throw new ApplicationException(AppResult.failed(ResultCode.FAILED_LOGIN));
}
// 2.按用户名查询用户信息
User user = selectByUserName(username);
// 3.对查询结果进行非空校验
if (user == null) {
// 打印日志
log.warn(ResultCode.FAILED_LOGIN.toString() + ", username = " + username);
// 抛出异常, 统一抛出 ApplicationException
throw new ApplicationException(AppResult.failed(ResultCode.FAILED_LOGIN));
}
// 4.对密码校验
String encryptPassword = MD5Util.md5Salt(password, user.getSalt());
// 5.用密文和数据库中存的用户密码进行比较
if(!encryptPassword.equals(user.getPassword())) {
// 打印日志
log.warn(ResultCode.FAILED_LOGIN.toString() + ", 密码错误, username = " + username);
// 抛出异常, 统一抛出 ApplicationException
throw new ApplicationException(AppResult.failed(ResultCode.FAILED_LOGIN));
}
// 打印登录成功的日志
log.info("[UserServiceImpl.login()]: " + username + " 登录成功");
return user;
}
5.单元测试

@Test
void selectByUserName() {
System.out.println(userService.selectByUserName("boy"));
}
@Test
void login() {
System.out.println(userService.login("wj", "123456"));
}
6. Controller实现方法对外提供API接口

7.测试API接口

