java后台实现用户密码登录和手机短信登录

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值