비밀번호 암호화하기
📑 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>
'BackEnd > Spring Boot' 카테고리의 다른 글
[ Spirng ] Security - java (4) Spring-Security를 사용한 암호화 (0) | 2023.03.06 |
---|---|
[ Spirng ] Security - java (3) 회원권한 설정 (0) | 2023.03.05 |
[ Spring ] Security - java (1) 기반의 보안 환경설정과 사용방법 (0) | 2023.03.05 |
[ Spring ] JAVA 기반의 환경설정 방법 (0) | 2023.03.04 |
[ String ] 파일 업로드 기능 Api ( cos.jar ) (0) | 2023.03.04 |