채팅 서버 - 낯선 사람 복호화 (8) 비밀번호 찾기, 개인정보 수정

6753 단어 서버잡담하다
제시: 공사가 좀 커서 개인적으로 잘 모르겠거나 논리성이 부족할 수 있습니다. 문제가 있으면 제때에 저에게 연락 주세요.원래 공정:https://github.com/LineChen/
2. 비밀번호 찾기
주의점: 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("[email protected]"));// 
        messgae.setText(content);// 
        messgae.setSubject(subject);// 

        // 
        tran = session.getTransport();  
        tran.connect("smtp.163.com", 25, "[email protected]", "BigBad670067");// 
        // tran.connect("smtp.qq.com", 25, "[email protected]", "xxxx");// QQ 
        tran.sendMessage(messgae, new Address[]{ new InternetAddress(clinetmailAddress)});// 
        tran.close();
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }   
}

}
처리 코드:/*** 비밀번호 찾기 * @param session * @param moMoMsg */public void handleFindPasswd(IoSession, iMoMsg moMsg) {JSON Object json = JSON.parseObject(moMsg.msgJson); String userEmail = json.getString(MsgKeys.userEmail);/메일 주소 SqlModel = new SqlModel(); String userName = model.getUserName(userEmail,true), iMoMsg Notify = new iMoMsg(); 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 SendEmail ToClient(userEmail,'비밀번호 찾기','존경하는'+userName +': 안녕하세요. 시스템이 무작위로 생성한 비밀번호는'+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, iMoMsgTypes.FIND_PASSWD_FAILED);}Notify.msgJson = NotifyJson.toJSONString(); session.write(Notify); }
3. 비밀번호 리셋, 사용자 이름 수정, 개성 서명 수정 등 개인정보 처리 방법은 모두 같다.사용자 Id에 따라 직접 데이터베이스 수정/*** 개인정보 수정 처리 * @param moMoMsg */public void handleResetUserInfo (iMoMsg moMoMsg) {JSON Object json = JSON.parseObject (moMoMsg.msgJson), String userId = json.getString (MsgKeys.userId), int type = json.getIntValue (MsgKeys.msgType), SqlModel = new SqlModel del();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(사용자 편지 수정 실패);}//알림 메시지를 보내지 않습니다}
4. 개인 프로필 사진을 수정하고 개인 프로필 사진을 수정하는 것은 사용자 프로필 파일을 수정하면 끝날 뿐만 아니라 자신의 친구에게'프로필 사진을 바꿉니다'라고 제때에 통지해야 한다.이유는 여기 클라이언트가 친구 목록을 요청할 때마다 핸드폰 로컬에 이 친구의 프로필 사진이 있는지 판단하고 있으면 서버에 요청하지 않기 때문이다.그래서 만약에 여기에 친구에게'프로필 사진을 바꿨어요'라고 자발적으로 일깨워 주지 않는다면 만약에 그의 어떤 친구 핸드폰에 프로필 사진이 이미 존재한다면 이 친구 목록에 표시된 프로필 사진은 이전의 것이다.처리 코드:/*** 프로필 사진 수정 처리 * @param session * @param moMsg */public void handleResetHead(IoSession, iMoMsg moMsg) {JSON Object json = JSON.parseObject(moMsg.msgJson); String userId = json.getString(MsgKeys.userId); String userHeadPath = StaticValues.HEAD_P_PATH + userId +".png;iMoMsg Notify = new iMoMsg(); Notify.symbol = ‘+’; JSONObject NotifyJson = new JSONObject(); try {FileTools.getInstance().saveMultyFile(userHeadPath, moMoMsg.msgBytes);//수정 성공 System.out.println("이미지 수정 성공");NotifyJson.put(MsgKeys.msgType, iMoMsgTypes.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);

//System.out.println ("전송 성공...");}else { if (!model.isTableExists(“mc_” + friendId))//“mc_” + userId model.createCacheTable(friendId);//캐시 데이터베이스 만들기 MsgDb msgDb = MsgTranceUtil.getInstance().Trance_Net2Db( resetHead); if(model.insertCacheMsg(msgDb,friendId) {//System.out.println("캐시 성공");}else {//System.out.println ("캐시 실패");}}
    } catch (Exception e) {
        //  
        NotifyJson.put(MsgKeys.msgType, iMoMoMsgTypes.RESET_HEAD_FAILED);

//System.out.println ("이미지 수정 실패");}Notify.msgJson = NotifyJson.toJSONString(); session.write(Notify); }
여기서 오프라인 메시지를 보낼지 여부를 고려해야 한다. 즉, 이 사용자의 친구가 온라인에 있으면 바로 메시지를 보낸다. 그렇지 않으면 오프라인 메시지를 보낸다. (먼저 이 메시지를 데이터베이스에 저장하고 그 친구가 다음에 접속할 때 데이터베이스에 가서 오프라인 메시지가 있는지 조회하고 있으면 보내면 된다.) 이것은 다음에 구체적으로 논의해야 한다.

좋은 웹페이지 즐겨찾기