minlog
article thumbnail

 

비밀번호 암호화하기

 

📑 SecurityConfig

// 패스워드 인코딩 객체 설정
@Bean 
public PasswordEncoder passwordEncoder() {
     return new BCryptPasswordEncoder(); 
}

 

📑 MemberController.java

//추가
@Autowired 
PasswordEncoder pwEncoder;

1) 암호화 패스워드 객체를 사용하기 위해 연결

 

📑 MemberController.java

// 회원가입 처리
@RequestMapping("/memRegister.do")
public String memRegister(Member m, String memPassword1, String memPassword2, RedirectAttributes rttr, HttpSession session) {
    
    ...
    
    // 추가 : 비밀번호를 암호화 하기(API)
    String encyptPw=pwEncoder.encode(m.getMemPassword());
    
    ...
    
}

2) 회원가입시 DB에 암호화된 페스워드를 넣어준다.

 

 

 

 

2. 로그인시 암호화된 번호를 다시 일반 번호로 변경

 

📑 MemberController.java

// 로그인 기능 구현
	@RequestMapping("/memLogin.do")
	public String memLogin(Member m, RedirectAttributes rttr, HttpSession session) {
		if(m.getMemID()==null || m.getMemID().equals("") ||
		   m.getMemPassword()==null || m.getMemPassword().equals("")) {
		   rttr.addFlashAttribute("msgType", "실패 메세지");
		   rttr.addFlashAttribute("msg", "모든 내용을 입력해주세요.");
		   return "redirect:/memLoginForm.do";			
		}
		Member mvo=memberMapper.memLogin(m);
		// 추가 : 비밀번호 일치여부 체크
		if(mvo!=null && pwEncoder.matches(m.getMemPassword(), mvo.getMemPassword())) { // 로그인에 성공
		   rttr.addFlashAttribute("msgType", "성공 메세지");
		   rttr.addFlashAttribute("msg", "로그인에 성공했습니다.");
		   session.setAttribute("mvo", mvo); // ${!empty mvo}
		   return "redirect:/";	 // 메인		
		}else { // 로그인에 실패
		   rttr.addFlashAttribute("msgType", "실패 메세지");
		   rttr.addFlashAttribute("msg", "다시 로그인 해주세요.");
		   return "redirect:/memLoginForm.do";
		}		
	}

1) pwEncoder.matches 를 사용하여 폼으로 부터 전달 받은 비밀번호도 암호화 시켜 일치하는지 비교해준다.

- m.getMemPassword () : 로그인을 시도한 일반 번호의 패스워드

- mvo.getMemPassword() : DB로부터 멤버의 아이디 값과 비교하여 불러온 암호화된 패스워드 번호

 

📑 MemberMapper.xml

<resultMap type="kr.board.entity.Member" id="memberMap">
    <id property="memIdx" column="memIdx"/>
    <result property="memID" column="memID"/>
    <result property="memPassword" column="memPassword"/>
    <result property="memName" column="memName"/>
    <result property="memAge" column="memAge"/>
    <result property="memGender" column="memGender"/>
    <result property="memEmail" column="memEmail"/>
    <result property="memProfile" column="memProfile"/>
    <collection property="authList" resultMap="authMap">
    </collection>
</resultMap>

<resultMap type="kr.board.entity.AuthVO" id="authMap">
    <id property="no" column="no"/>
    <result property="memID" column="memID"/>
    <result property="auth" column="auth"/>
</resultMap>

2) 데이터베이스 테이블 join시 으로 테이블을 묶어서 명시가 필요하다.

<select id="memLogin" parameterType="kr.board.entity.Member" 
                        resultMap="memberMap">
       select * from mem_stbl mem LEFT OUTER JOIN mem_auth auth on
       mem.memID=auth.memID where mem.memID=#{memID}
  </select>
profile

minlog

@jimin-log

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!