1. 首先创建登录与用户信息VO类。
@Data
@ApiModel(description = "登陆对象")
public class LoginVO {@ApiModelProperty("手机号")private String mobile;@ApiModelProperty("密码")private String password;@ApiModelProperty("用户类型")private Integer type;}
@Data
@ApiModel(description="用户信息对象")
public class UserInfoVO {@ApiModelProperty(value = "用户姓名")private String name;@ApiModelProperty(value = "用户昵称")private String nickName;@ApiModelProperty(value = "头像")private String headImg;@ApiModelProperty(value = "手机号")private String mobile;@ApiModelProperty(value = "1:出借人 2:借款人")private Integer userType;@ApiModelProperty(value = "JWT访问令牌")private String token;
}
2. 实现登录服务
@Overridepublic UserInfoVO login(LoginVO loginVO, String ip) {String mobile=loginVO.getMobile();String password=loginVO.getPassword();Integer type=loginVO.getType();//用户是否注册QueryWrapper<UserInfo> queryWrapper=new QueryWrapper<>();queryWrapper.eq("mobile",mobile).eq("user_type",type);UserInfo userInfo=userInfoMapper.selectOne(queryWrapper);Assert.notNull(userInfo, ResponseEnum.LOGIN_MOBILE_ERROR);System.out.println(MD5.encrypt(password));//密码是否正确Assert.equals(MD5.encrypt(password),userInfo.getPassword(),ResponseEnum.LOGIN_PASSWORD_ERROR);//用户是否被禁用Assert.equals(userInfo.getStatus(),userInfo.STATUS_NORMAL,ResponseEnum.LOGIN_LOKED_ERROR);//记录用户登录日志UserLoginRecord userLoginRecord=new UserLoginRecord();userLoginRecord.setUserId(userInfo.getId());userLoginRecord.setIp(ip);userLoginRecordMapper.insert(userLoginRecord);//生成tokenString token= JwtUtils.createToken(userInfo.getId(),userInfo.getNickName());//组装UserInfoVOUserInfoVO userInfoVO = new UserInfoVO();userInfoVO.setToken(token);userInfoVO.setName(userInfo.getName());userInfoVO.setNickName(userInfo.getNickName());userInfoVO.setHeadImg(userInfo.getHeadImg());userInfoVO.setMobile(mobile);userInfoVO.setUserType(type);return userInfoVO;}
3. 实现相应的Controller
@ApiOperation("用户登录")@PostMapping("/login")public R Login(@RequestBody LoginVO loginVO, HttpServletRequest request){String mobile=loginVO.getMobile();String password=loginVO.getPassword();Integer type=loginVO.getType();Assert.notEmpty(password, ResponseEnum.MOBILE_NULL_ERROR);Assert.notEmpty(password,ResponseEnum.PASSWORD_NULL_ERROR);//记录用户登录ipString ip=request.getRemoteAddr();UserInfoVO userInfoVO=userInfoService.login(loginVO,ip);return R.ok().message("登陆成功!").data("userInfo",userInfoVO);}