解密陌生人(7)注册

提示: 因为工程稍微有点大对我个人来说,所以可能在某些方面讲的不清楚或逻辑性不够强,如果有问题请及时@我。
原工程:https://github.com/LineChen/

一、注册
注册就是保存用户的个人信息,包括用户注册邮箱,系统分配的Id(最开始没想到分配Id来标识一个用户,而是准备用邮箱,但是在保存用户离线消息时需要结合用户唯一标识来创建表,由于邮箱带有特殊字符@,所以不能作为表名,只有为每个注册的用户分配一个Id,之后所有通讯操作均用Id标识)、用户名、生日、性别、密码、头像

注意点:
1.头像的存储:这里并不是把头像用BLob型数据存到数据库,而是借助文件系统保存用户头像,包括之后的离线语音和离线图片,在数据库只用保存路径,这样操作简单,速度更快。其他所有和图片或语音相关的处理和这一样。

2.密码的存储:对于密码的各种操作,一定要尽量保证最大的安全度。在客户端和服务器传递之间,用的PBE对称加密,如果没有人专门花时间去抓包解密,而且就算这样也不一定能解密出来。然后,对于密码,比如注册时,或者登录时都要用到密码,发送到服务器的密码用的是MD5转换,也就是说,在数据库存储密码不会是明文存储,用明文存储密码是一件非常危险的做法。如果有人盗取了你的数据库,就同时得到用户的所有信息,包括密码。还记得前几年的“密码事件”,CSDN用户数据库泄露、天涯社区数据库泄露、索尼数据库泄露等等,涉及用户都是几千万,悲剧的是天涯社区存储用户的信息全部是明文,包括密码 ……

/**
* 处理注册
*
* @param session
* 会话
* @param moMsg
* 消息包
*/
public void handleRegister(IoSession session, iMoMoMsg moMoMsg) {
JSONObject json = JSON.parseObject(moMoMsg.msgJson);
SqlModel model = new SqlModel();
String userEmail = json.getString(MsgKeys.userEmail);
String userId = model.allocateId();// 分配Id
String userHeadPath = StaticValues.HEAD_P_PATH + userId + “.png”;
FileTools.getInstance().saveMultyFile(userHeadPath, moMoMsg.msgBytes);
String sql = “insert into imomo_clients values (?,?,?,?,?,?,?,?,?)”;
String[] paras = { userId, userEmail, json.getString(MsgKeys.userName),
json.getString(MsgKeys.userPasswd), userHeadPath,
json.getString(MsgKeys.userSex),
json.getString(MsgKeys.userBirthday), “” , 0+”“};
iMoMoMsg Notify = new iMoMoMsg();
Notify.symbol = ‘+’;
JSONObject NotifyJson = new JSONObject();
if (model.updateDb(sql, paras)) {
NotifyJson.put(MsgKeys.msgType, iMoMoMsgTypes.REGISTER_SUCCESS);
System.out.println(“注册成功”);
} else {
NotifyJson.put(MsgKeys.msgType, iMoMoMsgTypes.REGISTER_FAILED);// 注册失败
}
Notify.msgJson = NotifyJson.toJSONString();
session.write(Notify);
}

从上可以看到,注册分为分配用户Id,然后保存个人信息。保存成功便是注册成功,发送注册成功的通知给用户。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值