비밀번호변경/회원 탈퇴 구현

DeadWhale·2022년 5월 6일
0

Servlet/JSP

목록 보기
13/22
post-thumbnail

Community 웹 사이트 MyInfo에서 비밀번호 변경 / 회원탈퇴 부분.


ChangePw

진행 순서

홈페이지 
⏩  myPageInfo 
⏩ (doGet)myPage-changePw . servlet
⏩  myPage-changePw . jsp
⏩  EncryptFilter를 통해 비밀번호 암호화(
⏩ (doPost)myPage-changePw . servlet
⏩  JDBC 수행 후 Session Scope로 팝업 알림 전달(message)

비밀번호 부분 구현

MyPageInfo에서 사이드 바를 이용해 비밀번호 변경 창으로 이동할 수 있다 이때 비밀번호 변경 페이지에서도
header , footer , sideBar는 모듈화해서 JS로 include 한다.

새로 입력한 비밀번호를 확인하는 부분은 js를 이용해 검증한다
.# 서버로 전송해 비교하지 않는다(Servlet)

이 때 "비밀번호"를 변경하는 것임으로 보안화가 필요해 EncryptFilter를 지나쳐야 한다 이때 wrapper에서 변환하기 위한 case의 경우를 변경해야 한다

Why? : name속성 값이 달라 wrapper에 걸리지 않아서.


비밀번호를 입력받은 후

Servlet에서 post 방식으로 전달 받은 다음
필요한 변수를 생성하고 전달받는다
현재 로그인한 멤버의 정보가 필요함으로
세션 객체를 생성한다

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

이 때 매개변수 값을 전달해야 하는데
동일한 종류(비밀번호)가 두개 임으로 따로 보내야 하는데
이럴 때 보내는 방식이 3개 정도 있다


1 ) 매개변수로 값을 각각 따로 전달

  • ( 최대 4개 를 초과하지 않도록 한다 하면 뚝배기 펑)
    2 ) Map 을 이용해 전달 ( Key,Value )
    3 ) 목적에 맞는 VO를 새로 만들기
  • (1회성 목적으로 사용할려고 만들면 뚝뺴기 깨짐)

평범하게 JDBC 수행후 수행 결과를
세션 객체 메세지를 전달한다
이때 비밀번호는 어디 곳에서나 숨겨져있음으로
동기화 작업을 하지 않아도 괜찮다.


Secession(회원탈퇴의 의미로 사용)

Secession

진행 순서

홈페이지 
⏩  myPageInfo 
⏩ (doGet)MyPageSecessionServlet.java
⏩ myPage-secession.jsp 
⏩ (doPost)MyPageSecessionServlet.java
⏩ JDBC 수행 후 정상 수행일 경우 세션을 무효화해 로그아웃시킨다
(session . invalidate() : 무효화 )

전체적으로 동일하지만 비밀번호가 사용되지 않아
보안화 필터를 거치지 않아도 괜찮다

또한 JDBC가 정상적으로 수행된 경우
로그아웃 절차를 수행해야 하는데
이미 만들어 둔 Logout servlet으로 Redirect하거나
바로 세션 객체를 무요화 시킨 후 Redirect 한다

이미 저장되어 있는 쿠키도 삭제할 수 있지만
이미 쿠키의 수명이 30일로 정해져 있어서 굳이 안지워도 되지않을까 싶긴하다.

JDBC 수행 결과가 성공일 경우!

int result = service.secession(mem);
String path =null;
if(result>0) {
	//1 . 로그아웃 서블릿으로 보내 로그아웃 시키는 방법
	//2 . 이 IF 내부에서 SESSION 무효화 후 진행
	session.invalidate();

	//session을 무효화 해서 메세지를 무효화 하게 되버려 세션에 set을 무효화 한 다음 
	// 새로 생성된 세션을 얻어온다.
	session=req.getSession();
	
	session.setAttribute("message", "탈퇴 되었습니다.");
	path=req.getContextPath();
	
	Cookie c = new Cookie("saveId","");//쿠키생성
	c.setMaxAge(0); //쿠키 수명
	c.setPath(req.getContextPath());//쿠키가 적용될 주소
	resp.addCookie(c); //쿠키 전달.

}else {
	session.setAttribute("message", "비밀번호가 일치하지 않습니다.");		
	path="secession";
}

resp.sendRedirect(path);

0개의 댓글