로그인 폼에서 이름과 이메일을 입력하면 아이디,
임시로 생성한 비밀번호를 이메일로 보내주도록 한다
단, 이메일과 이름이 일치하는 경우에만 메일을 발송하도록 한다.
● [아이디/비번찾기] - findID.jsp
1) 이름과 이메일을 입력받아서 일치가 되면 id를 가져오고
2) 임시 비밀번호를 발급 해서
3) 아이디와 임시 비밀번호를 이메일로 전송하기
4) 임시비밀번호로 로그인 한후,
본인이 회원 정보 수정에서 비밀번호를 수정한다
● [임시 비밀번호 발급]
1) 대문자, 소문자, 숫자를 이용해서 랜덤하게 10글자를 만들기
2) 1)에서 생성된 임시 비밀번호를 테이블에서 수정하기
member.dao
public boolean findId(MemberDTO dto) {
boolean flag= false;
try {
con=dbopen.getConnection();
sql=new StringBuilder();
sql.append(" select id ");
sql.append(" from member ");
sql.append(" where mname=? and email=? ");
pstmt=con.prepareStatement(sql.toString());
pstmt.setString(1,dto.getMname());
pstmt.setString(2,dto.getEmail());
rs=pstmt.executeQuery();
if(rs.next()) {
String id=rs.getString("id");
char[] charSet = new char[] {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
};
String str="";
// 문자 배열 길이의 값을 랜덤으로 10개를 뽑아 구문을 작성함
int idx = 0;
for (int i = 0; i < 10; i++) {
idx = (int) (charSet.length * Math.random());
str += charSet[idx];
}
sql.delete(0,sql.length());
sql.append(" update member ");
sql.append(" set passwd=? ");
sql.append(" where mname=? and email=? ");
pstmt=con.prepareStatement(sql.toString());
pstmt.setString(1,str.toString());
pstmt.setString(2,dto.getMname());
pstmt.setString(3,dto.getEmail());
int cnt=pstmt.executeUpdate();
if(cnt==1) {
String content=" 임시 비밀번호를 보내드립니다 ";
content +=" 추후 로그인하여 바꾸시길 바랍니다 ";
content+="<hr>";
content+="임시 발급된 비밀번호:"+str.toString();
///
String mailServer="mw-002.cafe24.com"; //cafe24 메일 서버
Properties props= new Properties();
props.put("mail.smtp.host",mailServer);
props.put("mail.smtp.auth",true);
//3. 메일 서버에서 인증받은 계정 +비번
Authenticator myAuth= new MyAuthenticator(); //다형성
//4. 2와 3이 유효한지 검증
Session sess=Session.getInstance(props,myAuth);
//받는사람 이메일 주소
InternetAddress[] address={ new InternetAddress(dto.getEmail())};
Message msg=new MimeMessage(sess);
msg.setRecipients(Message.RecipientType.TO, address);
//보낸 사람
msg.setFrom(new InternetAddress(dto.getEmail()));
//메일 제목
msg.setSubject("요청하신 아이디와 비밀번호");
//메일 내용
msg.setContent(content,"text/html; charset=UTF-8");
//메일 보낸 날짜
msg.setSentDate(new Date());
//메일 전송
Transport.send(msg);
flag=true;
}
}else {
flag=false;
}
} catch (Exception e) {
System.out.println("멤버 테이블 행추가 실패"+e);
}finally {
DBClose.close(con,pstmt);
}
return flag;
}
findid.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="authi.jsp" %>
<%@ include file="../header.jsp" %>
<!-- 본문 시작 -->
<h3>*아이디 찾기*</h3>
<form name="loginfrm" id="loginfrm" method="post" action="findIdProc.jsp" onsubmit="return findCheck()">
<table class="table">
<tr class="success">
<td> <input type="text" name="mname" id="mname" placeholder="이름" maxlength="10" required>
</td>
</tr>
<tr class="success">
<td> <input type="email" name="email" id="email" placeholder="이메일" maxlength="50" required>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="아이디 찾기">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
<!-- 본문 끝 -->
<%@ include file="../footer.jsp" %>
findProc.jsp
<%@page import="javax.mail.Session"%>
<%@page import="javax.mail.Authenticator"%>
<%@page import="org.eclipse.jdt.internal.compiler.ast.IfStatement"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp" %>
<%@ include file="../header.jsp" %>
<!-- 본문 시작 -->
<h3>*로그인 결과*</h3>
<%
String mname =request.getParameter("mname").trim();
String email =request.getParameter("email").trim();
dto.setMname(mname);
dto.setEmail(email);
boolean flag =dao.findId(dto);//아이디를 가져오기
if(flag==false){
out.println("<p>이름 이메일 확인해주세요</p>");
out.println("<p><a href='javascript:history.back()'>재시도</a></p>");
} else {
out.println("<script>");
out.println(" alert('임시 비밀번호 발급 성공');");
out.println(" location.href='../member/loginForm.jsp';");
out.println("</script>");
}
%>
<!-- 본문 끝 -->
<%@ include file="../footer.jsp" %>