YJ의 새벽

JDBC 활용 연습용10. ( 비밀번호 변경 ) 본문

SelfStudy/JDBC

JDBC 활용 연습용10. ( 비밀번호 변경 )

YJDawn 2023. 4. 4. 14:03

 

 

 

 

 

 

-- 폼형식의  changePwValidate() 함수를 써먹자.

 

 

 

-- myPage.js   파일   ( 유효성 검사 )  

 

/////////////////////////////////////////////////// 비밀번호 수정 
function printAlert(el, message){ // 매개변수 el은 요소
    alert(message);
    el.focus();
    return false;
}

// 비밀번호 변경 제출 시 유효성 검사
function changePwValidate(){

    // 비밀번호 변경 관련 input 요소 얻어오기
    const currentPw = document.getElementsByName("currentPw")[0];
    const newPw = document.getElementsByName("newPw")[0];
    const newPwConfirm = document.getElementsByName("newPwConfirm")[0];

    // 비밀번호 정규표현식
    const regEx = /^[\w!@#_-]{6,30}$/;

    // 현재 비밀번호 미작성
    if(currentPw.value.trim().length == 0){
        /*alert("현재 비밀번호를 입력해주세요.");
        currentPw.focus();
        return false;*/

        return printAlert(currentPw, "현재 비밀번호를 입력해주세요.");
    }

    // 새 비밀번호
    // 미작성
    if(newPw.value.trim().length == 0){
        alert("새 비밀번호를 입력해주세요.");
        newPw.focus();
        return false;
    }

    // 유효하지 않은 경우
    if(!regEx.test(newPw.value)){
        alert("영어, 숫자, 특수문자(!,@,#,-,_) 6~30 글자 사이로 작성해주세요.");
        newPw.focus();
        return false;
    }

    // 새 비밀번호 확인
    // 미작성
    if(newPwConfirm.value.trim().length == 0){
        return printAlert(newPwConfirm, "새 비밀번호 확인을 입력해주세요.");
    }

    // 새 비밀번호 != 새 비밀번호 확인
    if(newPw.value != newPwConfirm.value){
        return printAlert(newPwConfirm, "새 비밀번호가 일치하지 않습니다.");
    }
    return true; // 위 조건을 모두 수행하지 않은 경우 true 반환
}

 

 

-- MyPageChangePwServlet.class .    서블릿클래스 .

@WebServlet("/member/myPage/changePw")
public class MyPageChangePwServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		String path = "/WEB-INF/views/member/myPage-changePw.jsp";
		req.getRequestDispatcher(path).forward(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		String currentPw = req.getParameter("currentPw"); // 입력할 현재비밀번호

		String newPw = req.getParameter("newPw"); // 새로운 비밀번호

		HttpSession session = req.getSession();
		Member loginMember = (Member) session.getAttribute("loginMember");

		int loginNo = loginMember.getMemberNo(); // 로그인된 회원번호

		MemberService service = new MemberService();

		try {
			int result = service.changePw(loginNo, currentPw, newPw);

			if (result > 0) {
				session.setAttribute("message", "비밀번호가 변경되었습니다");
			} else {
				session.setAttribute("message", "비밀번호를 다시 확인해주세요");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		resp.sendRedirect("changePw");
	}
}

 

-- MemberService.class   

	/**
	 * 비밀번호 바꾸기 서비스
	 * 
	 * @param loginNo
	 * @param currentPw
	 * @param newPw
	 * @return
	 */
	public int changePw(int loginNo, String currentPw, String newPw) throws Exception {

		Connection conn = getConnection();

		int result = dao.checkPw(conn, loginNo, currentPw);   // 현재비밀번호 맞는지 체크 후

		if (result == 1) {
			result = dao.changePw(conn, currentPw, newPw);   // 맞다면 비밀번호를 바꾸자.
		}
		
		if (result > 0)    commit(conn);
		else        	rollback(conn);

		close(conn);

		return result;
	}

 

-- MemberDAO.class    (  입력한 비밀번호가 현재비밀번호인지 체크한후,  맞다면 update 문 실행.

 

/**  현재비밀번호 / 로그인비밀번호 같은지 체크 DAO
 * @param conn
 * @param loginNo
 * @param currentPw
 * @return
 */
public int checkPw(Connection conn, int loginNo, String currentPw) throws Exception{
	int result=0;
	try {
		String sql = prop.getProperty("checkPw");
		
		pstmt = conn.prepareStatement(sql);
		pstmt.setInt(1, loginNo);
		pstmt.setString(2, currentPw);
		
		rs= pstmt.executeQuery();
		
		if ( rs.next()  ) {	
			result = 1 ;
			}else {
			result = 0 ;
		}
	}finally {
		close(rs);
		close(pstmt);
	}
	return result;
}

/**   비밀번호 바꾸기 . 
 * @param conn
 * @param currentPw
 * @param newPw
 * @return
 */
public int changePw(Connection conn, String currentPw, String newPw) throws Exception{
	int result = 0;
	try {
		String sql = prop.getProperty("changePw");
        
		pstmt=conn.prepareStatement(sql);
		pstmt.setString(1, newPw);
		pstmt.setString(2, currentPw);
		
		result = pstmt.executeUpdate();
		
	}finally {
		close(pstmt);
	}
	return result;
}

 

--  member-sql.xml    (  pw 확인 , pw 업데이트 쿼리문 )

 

	<entry key="checkPw">
        SELECT * FROM MEMBER
        WHERE MEMBER_NO=?
        AND MEMBER_PW= ?
	</entry>
	
	<entry key="changePw">
        UPDATE MEMBER SET
        MEMBER_PW = ? 
        WHERE MEMBER_PW = ? 
	</entry>

 

 

 

 

 

 

 

 

 

--------- 페이지 마다 존재하는 footer.jsp  ,  header.jsp    부분에  sessionScope.message 를 넣어주자

<c:if test="${!empty sessionScope.message}">
    <script>
        alert("${message}");
    </script>
    <c:remove var = "message" scope="session"/>
</c:if>

이 메시지가 셋팅됨.

------- result ( update문 실행결과 )  를 가지고 , alert 창을 띄어준다 .

 

 

 

 

Comments