BackEnd/Spring Boot
[ Spring ] Security - java (2) 비밀번호 암호화하기
jimin-log
2023. 3. 5. 12:21
비밀번호 암호화하기
📑 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>