1.账号密码登录:获取用户名、密码,检验是否存在该账号,以及该账号是否有效(未冻结、未删除),检验密码是否正确
public Result<JSONObject> login(@RequestBody SysLoginModel sysLoginModel) throws Exception {
Result<JSONObject> result = new Result<JSONObject>();
String username = sysLoginModel.getUsername();
String password = sysLoginModel.getPassword();
//update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题
//前端密码加密,后端进行密码解密
//password = AesEncryptUtil.desEncrypt(sysLoginModel.getPassword().replaceAll("%2B", "\\+")).trim();//密码解密
//update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题
//1. 校验用户是否有效
SysUser sysUser = sysUserService.getUserByName(username);
result = sysUserService.checkUserIsEffective(sysUser);
if(!result.isSuccess()) {
return result;
}
//2. 校验用户名或密码是否正确
String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt());
String syspassword = sysUser.getPassword();
if (!syspassword.equals(userpassword)) {
result.error500("用户名或密码错误");
return result;
}
//用户登录信息
userInfo(sysUser, result);
sysBaseAPI.addLog("用户名: " + username + ",登录成功!", CommonConstant.LOG_TYPE_1, null);
return result;
}
2.短信验证码登录
2.1获取验证码:获取手机号、短信模板号-->随机产生验证码-->根据模板号发送登录模板,设置有效时间
public Result<String> sms(@RequestBody JSONObject jsonObject) {
Result<String> result = new Result<String>();
String phone = jsonObject.get("phone").toString();
String smsmode=jsonObject.get("smsmode").toString();
log.info(phone);
Object object = redisUtil.get(phone);
if (object != null) {
result.setMessage("验证码10分钟内,仍然有效!");
result.setSuccess(false);
return result;
}
//随机数
String captcha = RandomUtil.randomNumbers(6);
JSONObject obj = new JSONObject();
obj.put("code", captcha);
try {
boolean b = false;
//登录模板
if (CommonConstant.SMS_TPL_TYPE_0.equals(smsmode)) {
b = DySmsHelper.sendSms(phone, obj, DySmsEnum.LOGIN_TEMPLATE_CODE);
}
if (b == false) {
result.setMessage("短信验证码发送失败,请稍后重试");
result.setSuccess(false);
return result;
}
//验证码10分钟内有效
redisUtil.set(phone, captcha, 600);
//update-begin--Author:scott Date:20190812 for:issues#391
//result.setResult(captcha);
//update-end--Author:scott Date:20190812 for:issues#391
result.setSuccess(true);
} catch (ClientException e) {
e.printStackTrace();
result.error500(" 短信接口未配置,请联系管理员!");
return result;
}
return result;
}
2.2 开通阿里云短信服务,得到accessKeyId和accessKeySecret
// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
static String accessKeyId;
static String accessKeySecret;
2.3 查看是否存在该用户,若不存在,登录即注册,将该手机号存入数据库,检验验证码是否正确,错误输出提示信息,正确则登录成功
public Result UserPhoneLogin(@Valid @RequestBody ApiLoginModel loginModel,BindingResult bindingResult) {
Result<JSONObject> result = new Result<JSONObject>();
String phone = loginModel.getPhone();
//校验用户有效性
MemberUser memberUser = memberUserService.getUserByPhone(phone);
if(oConvertUtils.isEmpty(memberUser)) {
//添加
memberUserService.add(phone);
}
if(!result.isSuccess()) {
return result;
}
String smscode = loginModel.getCaptcha();
Object code = redisUtil.get(phone);
if (!smscode.equals(code)) {
result.setMessage("手机验证码错误");
return result;
}
//添加日志
sysBaseAPI.addLog("手机号: " + memberUser.getPhone() + ",登录成功!", CommonConstant.LOG_TYPE_1, null);
result.setMessage("登录成功");
return result;
}