解密陌生人(8)找回密码、修改个人信息

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

二、找回密码

注意点: 1.找回密码不是简单的从数据库把密码取出来然后发送给用户。首先,数据库存储的密码是经过MD5转换的,无法得到密码明文,再说就算能得到,也不能发送密码明文给客户,不然这又违背了安全性原则。 2.这里是这样处理的:系统直接生成一个密码,然后修改数据库,然后把这个密码通过邮件方式发送给用户

发送邮件的类: package com.server_utils; import java.util.*;

import javax.mail.*; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage;

public class SendEmailToClient {

Properties properties=null;Session session=null;Message messgae=null;Transport tran=null;public SendEmailToClient(String clinetmailAddress,String subject,String content){try {properties=new Properties();properties.setProperty(“mail.transport.protocol”, “smtp”);//发送邮件协议properties.setProperty(“mail.smtp.auth”, “true”);//需要验证// properties.setProperty(“mail.debug”, “true”);//设置debug模式后台输出邮件发送的过程session = Session.getInstance(properties);session.setDebug(false);//debug模式->控制台会显示发送邮件的具体细节//邮件信息messgae = new MimeMessage(session);messgae.setFrom(new InternetAddress(“15764230067@163.com”));//设置发送人messgae.setText(content);//设置邮件内容messgae.setSubject(subject);//设置邮件主题//发送邮件tran = session.getTransport();tran.connect(“smtp.163.com”, 25, “15764230067@163.com”, “BigBad670067”);//连接到新浪邮箱服务器// tran.connect(“smtp.qq.com”, 25, “Michael8@qq.vip.com”, “xxxx”);//连接到QQ邮箱服务器tran.sendMessage(messgae, new Address[]{ new InternetAddress(clinetmailAddress)});//设置邮件接收人tran.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} }

}

处理代码: /** * 处理找回密码 * * @param session * @param moMoMsg */ public void handleFindPasswd(IoSession session, iMoMoMsg moMoMsg) { JSONObject json = JSON.parseObject(moMoMsg.msgJson); String userEmail = json.getString(MsgKeys.userEmail);// 邮箱地址 SqlModel model = new SqlModel(); String userName = model.getUserName(userEmail, true); iMoMoMsg Notify = new iMoMoMsg(); Notify.symbol = ‘+’; JSONObject NotifyJson = new JSONObject(); String newPwd = PasswordUtil.getInstance().createNewPwd(); if (!userName.equals(“null”)) { String sql = “update imomo_clients set userPasswd = ? where userEmail = ?”; String[] paras = { PasswordUtil.getInstance().toMD5(newPwd), userEmail }; if (model.updateDb(sql, paras)) { // 发送邮件… new SendEmailToClient(userEmail, “找回密码”, “尊敬的” + userName + “:\n 您好,系统为您随机生成的密码是:” + newPwd + “,登录后请尽快修改密码!”); NotifyJson.put(MsgKeys.msgType, iMoMoMsgTypes.FIND_PASSWD_SUCCESS); } else { NotifyJson.put(MsgKeys.msgType, iMoMoMsgTypes.FIND_PASSWD_FAILED); } } else { System.out.println(“没有该用户”); NotifyJson.put(MsgKeys.msgType, iMoMoMsgTypes.FIND_PASSWD_FAILED); } Notify.msgJson = NotifyJson.toJSONString(); session.write(Notify); }

三、重置密码、修改用户名、修改个性签名等个人信息 处理方法都是一样的,根据用户Id直接修改数据库 /** * 处理修改个人信息 * * @param moMoMsg */ public void handleResetUserInfo(iMoMoMsg moMoMsg) { JSONObject json = JSON.parseObject(moMoMsg.msgJson); String userId = json.getString(MsgKeys.userId); int type = json.getIntValue(MsgKeys.msgType); SqlModel model = new SqlModel(); String sql = “”; String[] paras = new String[2]; switch (type) { case iMoMoMsgTypes.RESET_USERNAME: sql = “update imomo_clients set userName = ? where userId = ?”; paras[0] = json.getString(MsgKeys.userName); break; case iMoMoMsgTypes.RESET_SEX: sql = “update imomo_clients set userSex = ? where userId = ?”; paras[0] = json.getString(MsgKeys.userSex); break; case iMoMoMsgTypes.RESET_BIRTHDAY: sql = “update imomo_clients set userBirthday = ? where userId = ?”; paras[0] = json.getString(MsgKeys.userBirthday); break; case iMoMoMsgTypes.RESET_SIGNATUE: sql = “update imomo_clients set personSignature = ? where userId = ?”; paras[0] = json.getString(MsgKeys.personSignature); break; } paras[1] = userId; if (model.updateDb(sql, paras)) { System.out.println(“修改用信息成功”); } else { System.out.println(“修改用户信失败”); } // 不发送通知消息 }

四、修改个人头像 修改个人头像不仅仅是修改一下用户头像文件就完事了,还要及时通知自己的好友“我换头像啦”。 原因是:这里客户端每次请求好友列表时会判断手机本地是否有该好友的头像,如果有就不用向服务器请求(这样也是为了减少不必要的流量)。所以如果这里不去主动提醒好友“我换头像了”,,假如他的某个好友手机本地已经存在头像了,那在这个好友列表中显示的头像一直以前的。 处理代码: /** * 处理修改头像 * * @param session * @param moMoMsg */ public void handleResetHead(IoSession session, iMoMoMsg moMoMsg) { JSONObject json = JSON.parseObject(moMoMsg.msgJson); String userId = json.getString(MsgKeys.userId); String userHeadPath = StaticValues.HEAD_P_PATH + userId + “.png”; iMoMoMsg Notify = new iMoMoMsg(); Notify.symbol = ‘+’; JSONObject NotifyJson = new JSONObject(); try { FileTools.getInstance().saveMultyFile(userHeadPath, moMoMsg.msgBytes); // 修改成功 System.out.println(“修改头像成功”); NotifyJson.put(MsgKeys.msgType, iMoMoMsgTypes.RESET_HEAD_SUCCESS);

SqlModel model = new SqlModel();String[] friendList = model.getFriendIds(userId);iMoMoMsg resetHead = new iMoMoMsg();resetHead.symbol = ‘-‘;JSONObject resetHeadJson = new JSONObject();resetHeadJson.put(MsgKeys.msgType, iMoMoMsgTypes.RESET_HEAD);resetHeadJson.put(MsgKeys.friendId, userId);// 通知好友是谁改头像的resetHeadJson.put(MsgKeys.userId, userId);// 我发的resetHead.msgJson = resetHeadJson.toJSONString();resetHead.msgBytes = moMoMsg.msgBytes;for (String friendId : friendList) {// 判断是否在线,在线直接转发,不在线缓存到数据库中if (ManageClientSession.isContainsId(friendId)) {ManageClientSession.getSession(friendId).write(resetHead);效果只能是既费时又没有胜利,再聪慧的人也没法成学。

解密陌生人(8)找回密码、修改个人信息

相关文章:

你感兴趣的文章:

标签云: