浅谈 Java web 项目实现手机号登录

最近项目中需要用到一个手机号登录的功能, 首先需要弄清楚的是,登录是一个怎么样的过程,首先正常的登录方式肯定是账号密码验证数据库登录,验证成功后将用户的信息 存入session,避免拦截方便后续操作。

手机号登录 则是需要根据手机号去判断验证码是否正确(我这里是将验证码存入ehcache缓存,然后对比用户输入的验证码),然后将手机号关联的用户查出来 存入session ,然后访问登录页的时候才不会被拦截

如下图


关键代码:


/**
* 发送短信
*/
@SuppressWarnings("unchecked")
@RequestMapping(value = "/login_sendSMSLogin", method = { RequestMethod.POST })
@ResponseBody
public Json login_sendSMSLogin(@RequestParam String mobile) {
Cache cache = this.cacheManager.getCache("getPhoneCode");
System.out.println("手机号:"+mobile);
//生成6位验证码
int number=(int)((Math.random()*9+1)*100000);
String content=String.valueOf(number);
// 发送短信对象
String duanxin = "{\"ext\":\"\",\"extend\":\"\",\"params\":[\"%content\"],\"sig\":\"%sig\",\"sign\":\"中国铁建\",\"tel\":{\"mobile\":\"%telnum\"},\"time\":%time,\"tpl_id\":%tempcode}";
        String dxAppId = "1400083423", dxAppKey = "5f7a4ab3351d7ca2152d1193342f8b30";
String tempcode = "106707";
String timestemp = SHA256.getNowTimeStamp(); 
int random1 =new Random().nextInt(1000000);
String random=String.valueOf(random1);

String sig = SHA256.getSHA256StrJava("appkey="+dxAppKey+"&random="+random+"&time="+timestemp+"&mobile="+mobile);
duanxin = duanxin.replace("%content", content).replace("%sig", sig).replace("%telnum", mobile).replace("%time", timestemp).replace("%tempcode", tempcode);
// 发送短信
String smResult = Http.sendPost("https://yun.tim.qq.com/v5/tlssmssvr/sendsms?sdkappid="+dxAppId+"&random="+random, 
duanxin, null,"application/x-www-form-urlencoded;charset=UTF-8");
com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(smResult) ;  
Integer isOk = jsonObject.getInteger("result");
if (isOk==0) {
cache.put(new Element("login_phoneCode_"+mobile, content));
System.out.println(cache.get("login_phoneCode_"+mobile).getObjectValue());
return new Json(true, "100", "发送成功", "123124124124142");
} else {
return new Json(true, "200", "发送失败", null);
}  
}
  







/**
* 验证用户( 手机登录)
*/
@SuppressWarnings("unchecked")
@ResponseBody
@RequestMapping(value = "/login_tophone",method = { RequestMethod.POST})
public Json login_tophone(
@RequestParam String mobile,@RequestParam String phoneCode) throws Exception {
Json result =null;
System.out.println("手机号:"+mobile+" 验证码 :"+phoneCode);
Cache cache = this.cacheManager.getCache("getPhoneCode");
String code=(String) cache.get("login_phoneCode_"+mobile).getObjectValue();
System.out.println(" 缓存中的code: "+code);
if(code.equals(phoneCode)) {
PageData pd=new PageData();
pd.put("PHONE", mobile);
List<PageData> users=userService.getUserByphone(pd);
if(users!=null&&users.size()>0) {
System.out.println("++++++++++++:"+users.get(0).getString("USERNAME"));
System.out.println("++++++++++++:"+users.get(0).getString("PASSWORD"));
// shiro加入身份验证
//shiro管理的session
Subject currentUser = SecurityUtils.getSubject();  
Session session = currentUser.getSession();
PageData org=new PageData();
org.put("DeptName", users.get(0).getString("DeptName"));
org.put("UnitName", users.get(0).getString("UnitName"));
org.put("OrgType", users.get(0).getString("OrgType"));
User user = new User();
user.setUSER_ID(users.get(0).getString("USER_ID"));
user.setUSERNAME(users.get(0).getString("USERNAME"));
user.setPHONE(users.get(0).getString("PHONE"));
user.setIDNumber(users.get(0).getString("IDNumber"));
user.setPASSWORD(users.get(0).getString("PASSWORD"));
user.setNAME(users.get(0).getString("NAME"));
user.setRIGHTS(users.get(0).getString("RIGHTS"));
user.setROLE_ID(users.get(0).getString("ROLE_ID"));
user.setLAST_LOGIN(users.get(0).getString("LAST_LOGIN"));
user.setIP(users.get(0).getString("IP"));
user.setSTATUS(users.get(0).getString("STATUS"));
user.setDepartmentCode(users.get(0).getString("DepartmentCode"));
user.setUnitCode(users.get(0).getString("UnitCode"));
session.setAttribute("org", org);
session.setAttribute(Const.SESSION_USER, user);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(user.getUSERNAME(), user.getPASSWORD());
subject.login(token);
Map<String,Object> map = new HashMap<String,Object>();
map.put("org", org);
map.put("user", user);
result= new Json(true, "100", "验证成功", map);
}else {
result=new Json(true, "200", "验证失败", users.get(0));;
}
}else {
result=new Json(true, "200", "验证失败","");
}
return result;

}

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值