KSI일기장
0428spring 마이페이지(2) 비밀번호변경(암호화) 본문
MyPageController
@Controller //bean으로 등록
@RequestMapping("/member/myPage")
@SessionAttributes({"loginMember"}) //session scope에서 loginMember를 얻어옴
public class MyPageController {
@Autowired
private MyPageService service; //Service 연결
//회원 정보 조회 이동
@GetMapping("/info")
public String info() {
return "member/myPage-info";
// WEB-INF/views/member/myPage-info
}
//비밀번호 변경 이동
@GetMapping("/changePw")
public String changePw() {
return "member/myPage-changePw";
// WEB-INF/views/member/myPage-info
}
//비밀번호 변경(암호화)
@PostMapping("/changePw")
public String changePw(@RequestParam Map<String, Object> paramMap,
@ModelAttribute("loginMember") Member loginMember,
RedirectAttributes ra) {
//로그인된 회원의 번호를 paramMap에 추가
paramMap.put("memberNo", loginMember.getMemberNo());
//비밀번호 변경 서비스 호출
int result = service.changePw(paramMap);
String message = null;
String path = null;
if(result>0) {
message = "비밀번호 변경 성공";
path = "info";
}else {
message = "현재 비밀번호가 일치하지 않습니다";
path = "changePw";
}
ra.addFlashAttribute("message", message);
return "redirect:" + path;
}
MyPageService
/**비밀번호 변경 서비스
* @param paramMap
* @return
*/
int changePw(Map<String, Object> paramMap);
MyPageServiceImpl
//비밀번호 변경
@Override
public int changePw(Map<String, Object> paramMap) {
//bcrypt
//1)DB에서 현재 회원의 비밀번호를 조회한다
String encPw = dao.checkPw((int)paramMap.get("memberNo"));
//->Map상태라서 int로 다운캐스팅
//2)입력된 현재 비밀번호(평문)와 DB조회된 비밀번호(암호화) 비교(bcrypt.matches() 이용)
//3)비교결과 일치하면 받아온 새로운 비밀번호 암호화해서 update구문 실행
if(bcrypt.matches( (String)paramMap.get("currentPw"), encPw) ) {
//Map상태라서 String으로 다운캐스팅
paramMap.put("newPw", bcrypt.encode( (String)paramMap.get("newPw")) );
return dao.updatePw(paramMap);
}
//비밀번호가 일치하지 않으면 0 반환
return 0;
}
MyPageDAO
/**비밀번호 변경 DAO
* @param paramMap
* @return
*/
public int updatePw(Map<String, Object> paramMap) {
return sqlSession.update("myPageMapper.updatePw", paramMap);
}
/**현재 로그인한 회원 비밀번호 조회 DAO
* @param memberNo
* @return
*/
public String checkPw(int memberNo) {
return sqlSession.selectOne("myPageMapper.checkPw", memberNo);
}
mypage-mapper.xml
<!-- 비밀번호 비교를 위한 비밀번호 조회 -->
<select id="checkPw" resultType="string">
SELECT MEMBER_PW FROM MEMBER_S
WHERE MEMBER_NO = ${memberNo}
</select>
<!-- 비밀번호 변경 -->
<update id="updatePw">
UPDATE MEMBER_S SET
MEMBER_PW = #{newPw}
WHERE MEMBER_NO = ${memberNo};
</update>
-> resultType을 쓰고 안쓰고의 차이는 insert, update문은 넘겨주는 result값이 0,1로 int이므로 resultType기본값이 int여서 안적어줘도 되고,
select문은 string으로 적어줘야 한다
'Spring' 카테고리의 다른 글
Mybatis 동적 SQL( if, choose(when,oterwise), trim(where,set) ) (1) | 2023.05.03 |
---|---|
0428spring 마이페이지(3) 회원탈퇴 (1) | 2023.05.03 |
0502spring 게시판(3) 글 조회수 증가, 중복제거 (0) | 2023.05.02 |
jstl scope 4가지 종류 (0) | 2023.05.02 |
0502spring 게시판(2) 글 상세조회 (0) | 2023.05.02 |