JSP-웹페이지 구현(비밀번호 재발급,이메일 발송)

임재헌·2023년 4월 24일
0

JSP

목록 보기
29/33

로그인 폼에서 이름과 이메일을 입력하면 아이디,
임시로 생성한 비밀번호를 이메일로 보내주도록 한다
단, 이메일과 이름이 일치하는 경우에만 메일을 발송하도록 한다.

● [아이디/비번찾기] - 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" %>

0개의 댓글