채팅 서버 - 낯선 사람 복호화 (8) 비밀번호 찾기, 개인정보 수정
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); }
여기서 오프라인 메시지를 보낼지 여부를 고려해야 한다. 즉, 이 사용자의 친구가 온라인에 있으면 바로 메시지를 보낸다. 그렇지 않으면 오프라인 메시지를 보낸다. (먼저 이 메시지를 데이터베이스에 저장하고 그 친구가 다음에 접속할 때 데이터베이스에 가서 오프라인 메시지가 있는지 조회하고 있으면 보내면 된다.) 이것은 다음에 구체적으로 논의해야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
집 서버 설계 (하드웨어 편)자신의 Redmine이나 ownCloud를 운용하기 위해 사쿠라 VPS, DigitalOcean, OpenShift 등을 놀랐습니다만, 침착 해 왔으므로 현상을 정리하고 싶습니다. 먼저 하드웨어 구성을 정리합니다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.