@RequestMapping("update.me")
public String updateMember(Member m, Model model, HttpSession session) {
// System.out.println(m);
int result = memberService.updateMember(m);
if(result > 0) { // 성공
// 수정 성공일 경우 DB로부터 수정된 회원의 정보를 다시 조회해서
// session에 loginUser 키값으로 덮어씌워야 함
// => 이때, 기존의 loginMember 메소드를 재활용해서 조회
Member updateMem = memberService.loginMember(m);
session.setAttribute("loginUser", updateMem);
// session에 일회성 알람 문구도 담기
session.setAttribute("alertMsg", "성공적으로 회원 정보가 변경되었습니다.");
// 마이페이지 url 재요청
return "redirect:/myPage.me";
} else { // 실패
model.addAttribute("errorMsg", "회원 정보 변경 실패");
// /WEB-INF/views/common/errorPage.jsp
return "common/errorPage";
}
}
💻 MemberServiceImpl
@Override
public int updateMember(Member m) {
return memberDao.updateMember(sqlSession, m);
}
💻 MemberDao
public int updateMember(SqlSessionTemplate sqlSession, Member m) {
return sqlSession.update("memberMapper.updateMember", m);
}
💻 member-mapper.xml
<update id="updateMember" parameterType="member">
UPDATE MEMBER
SET USER_NAME = #{userName}
, EMAIL = #{email}
, AGE = #{age}
, PHONE = #{phone}
, ADDRESS = #{address}
, GENDER = #{gender}
, MODIFY_DATE = SYSDATE
WHERE USER_ID = #{userId}
</update>
🔥 회원 탈퇴 기능 🔥
💻 myPage.jsp
👉🏻 탈퇴 폼 링크 지정, userPwd name 속성 지정, userId도 input type="hidden"으로 함께 넘기기
👉🏻 userPwd: 회원 탈퇴 요청 시 사용자가 입력했던평문 비밀번호 👉🏻 session의 loginUser Member 객체의 userPwd 필드: 현재 이 로그인한 회원의 암호화된 비밀번호 👉🏻 이 두 가지 정보가 있어야만 matches 메소드 활용 가능!
@RequestMapping("delete.me")
public String deleteMember(String userPwd, String userId, HttpSession session, Model model) {
String encPwd = ((Member)session.getAttribute("loginUser")).getUserPwd();
// 비밀번호 대조 작업
if(bcryptPasswordEncoder.matches(userPwd, encPwd)) {
// 비밀번호가 맞을 경우 => 탈퇴 처리
int result = memberService.deleteMember(userId);
if(result > 0) { // 탈퇴 처리 성공
// 로그아웃 처리 후 일회성 알람 메시지 담기, 메인 페이지로 url 재요청
// session.invalidate(); // 로그아웃 처리이나 사용 불가! 일회성 alert창을 띄워야 하기 때문
session.removeAttribute("loginUser"); // 로그인한 회원의 정보만 지워 줌
session.setAttribute("alertMsg", "성공적으로 탈퇴되었습니다. 그동안 이용해 주셔서 감사합니다.");
return "redirect:/"; // 메인페이지로 url 재요청
} else { // 탈퇴 처리 실패 => 에러 문구를 담아서 에러 페이지로 포워딩
model.addAttribute("errorMsg", "회원 탈퇴 실패");
// /WEB-INF/views/common/errorPage.jsp
return "common/erroePage";
}
} else { // 비밀번호가 틀릴 경우 => 비밀번호 틀렸다고 알려 주고 마이페이지 url 재요청
session.setAttribute("alertMsg", "비밀번호를 잘못 입력하였습니다. 확인해 주세요.");
return "redirect:/myPage.me";
}
}
💻 MemberServiceImpl
@Override
public int deleteMember(String userId) {
return memberDao.deleteMember(sqlSession, userId);
}
💻 MemberDao
public int deleteMember(SqlSessionTemplate sqlSession, String userId) {
// 1 또는 0이 리턴되어 돌아갈 것
return sqlSession.update("memberMapper.deleteMember", userId);
}
💻 member-mapper.xml
<!-- 스트링 타입 단일값 1개로 구멍 메꾸기: parameterType은 소문자 string, #{매개변수명} -->
<update id="deleteMember" parameterType="string">
UPDATE MEMBER
SET STATUS = 'N'
WHERE USER_ID = #{userId}
</update>