로그인_기본 구현

hiyayeah·2023년 1월 30일
0

MVC_Model1 -> Spring_MVC

목록 보기
12/12

1. 로그인 Form 수정

간격이나 버튼 등을 가독성 있게 변경

2. 인증 회원 여부 판별

로그인을 시도하려는 회원이 메일 인증을 완료했는지 판별

  • MemberController.java
// 로그인 요청 처리
@PostMapping (value = "login")
public String login(@ModelAttribute MemberVO member, Model model, HttpSession session) {
	
	// 인증 회원 여부 조회
	int authenticatedUser = service.authenticatedUser(member.getMember_id());
	System.out.println(authenticatedUser);
	
	if(authenticatedUser > 0) {
		
        로
        그
        인
        작
        업
	
    // 인증 회원이 아니면 "메일 인증 필수" 메시지가 뜨도록
	} else {
		model.addAttribute("msg", "메일 인증 필수");
		return "fail_back";
	}
}
  • MemberMapper.xml
<!-- 로그인 - 인증 회원 여부 조회 -->
<select id="selectAuthenticatedUser" resultType="int">
	SELECT COUNT(*)
		FROM member
		WHERE 
			member_id = #{member_id}
		AND
			member_auth_gb = "Y"	
</select>
  • 확인
INFO : jdbc.sqlonly - SELECT COUNT(*) FROM member WHERE member_id = 'chacha' AND member_auth_gb = "Y" 

INFO : jdbc.resultsettable - 
|---------|
|count(*) |
|---------|
|1        |
|---------|


INFO : jdbc.sqlonly - SELECT COUNT(*) FROM member WHERE member_id = 'admin' AND member_auth_gb = "Y" 

INFO : jdbc.resultsettable - 
|---------|
|count(*) |
|---------|
|0        |
|---------|

메일 인증을 완료한 (member_auth_gb가 'Y'인) 회원 ID로 로그인을 시도할 시 1이 넘어오고, 완료하지 않은 회원 ID로 로그인을 시도할 시 0이 넘어오는 것을 확인

3. BCryptPasswordEncoder 활용한 로그인을 위해 패스워드 조회

회원가입 시 암호화를 통해 패스워드를 저장했다. 그러므로 로그인 시에도 암호화를 진행해 member 테이블에 있는 패스워드와 일치여부를 따져야한다.
먼저 로그인을 시도하는 아이디에 해당하는 패스워드를 조회한다.

  • MemberController.java
// 로그인 요청 처리
@PostMapping (value = "login")
public String login(@ModelAttribute MemberVO member, Model model, HttpSession session) {
	
	// 인증 회원 여부 조회
	int authenticatedUser = service.authenticatedUser(member.getMember_id());
	
	if(authenticatedUser > 0) {
		
		// ------------------ BCryptPasswordEncoder 활용한 로그인 판별 ----------------------
		// 1. BCryptPasswordEncoder 객체 생성
		BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
		
		// 2. member 테이블에서 id에 해당하는 패스워드 조회 후 리턴값 저장
		//    => 파라미터 : 아이디    리턴타입 : String(passwd)
		String passwd = service.getPasswd(member.getMember_id());
		
		.
        .
        .
        
		}
	} else {
		model.addAttribute("msg", "메일 인증 필수");
		return "fail_back";
	}
	
}
  • MemberMapper.xml
<!-- 로그인 - BCryptPasswordEncoder 활용한 로그인을 위해 패스워드 조회 -->
<select id="selectPasswd" resultType="string">
	SELECT member_passwd
		FROM member
		WHERE member_id = #{member_id}
</select>

⬇️chacha라는 아이디를 가진 회원으로 로그인을 시도한 결과, passwd가 잘 가져와지는 것을 확인!⬇️

INFO : jdbc.sqlonly - SELECT member_passwd FROM member WHERE member_id = 'chacha' 

INFO : jdbc.resultsettable - 
|-------------------------------------------------------------|
|member_passwd                                                |
|-------------------------------------------------------------|
|$2a$10$LOc9Zqi4gBRlMH7C.PAaROIQ7YZBIDc6ccGJzsJxBB6lAqzNYOrIC |
|-------------------------------------------------------------|

$2a$10$LOc9Zqi4gBRlMH7C.PAaROIQ7YZBIDc6ccGJzsJxBB6lAqzNYOrIC

4. 조회 결과를 활용하여 로그인 성공 여부 판별

  • MemberController.java
// 로그인 요청 처리
@PostMapping (value = "login")
public String login(@ModelAttribute MemberVO member, Model model, HttpSession session) {
	
	// 인증 회원 여부 조회
	int authenticatedUser = service.authenticatedUser(member.getMember_id());
	
	if(authenticatedUser > 0) {
		
		// ------------------ BCryptPasswordEncoder 활용한 로그인 판별 ----------------------
		
        .
        .
        .
		
		// 3. 조회 결과를 활용하여 로그인 성공 여부 판별
		//	  1) 아이디가 없을 경우(passwd 값이 null) 실패
		//    2) 패스워드 비교(BCryptPasswordEncoder 객체의 matches() 메서드 활용)
		//       2-1) 다를 경우 실패
		//       2-2) 같을 경우 성공
		if(passwd == null || !encoder.matches(member.getMember_passwd(), passwd)) {
			model.addAttribute("msg", "로그인 실패!");
			return "fail_back";
		} else {
			// HttpSession 객체에 세션 아이디 저장 후 메인페이지로 이동(Redirect 방식)
			session.setAttribute("sId", member.getMember_id());
			return "redirect:/";
		}
	} else {
		model.addAttribute("msg", "메일 인증 필수");
		return "fail_back";
	}
	
}
  • 확인

인증 완료된 회원의 아이디와 패스워드를 알맞게 넣을 시 로그인 성공!

0개의 댓글