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);}