KSI일기장
0426비밀번호 Bcrypt 암호화(Maven Repository 통한 라이브러리 사용) 본문
dependencies :Maven 프로젝트는 외부 저장소와 의존관계를 맺고 있어 프로젝트에 필요한
파일을(라이브러리) 사용자가 직접 받을 필요 없이 해당 태그내에 지정된 형식으로 작성하면
네트워크를 통해 외부 저장소에서 자동으로 얻어와 세팅한다
Maven Repository 홈페이지 접속해 필요한 라이브러리를 pom.xml <dependencies>안에 추가해준다
-pom.xml
-spring-security.xml 생성 후 암호화용 bean 생성 해준다
//MemberServiceImpl.java
package edu.kh.comm.member.model.service;
import org.mybatis.logging.LoggerFactory;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import edu.kh.comm.member.model.dao.MemberDAO;
import edu.kh.comm.member.model.vo.Member;
import lombok.extern.slf4j.Slf4j;
//bean객체로 등록
@Service //->비지니스 로직을 처리하는 클래스임을 명시 + bean으로 등록
@Slf4j
public class MemberServiceImpl implements MemberService {
//->에러 발생시 Add unimplemented method로 Member 오버라이딩
@Autowired //DAO하고 연결
private MemberDAO dao;
@Autowired
private BCryptPasswordEncoder bcrypt;
@Override
public Member login(Member inputMember) {
//전달 받은 비밀번호를 암호화 하여 DB에서 조회한 비밀번호화 비교(DB에서 비교X)
//sha방식 암호화
//A회원 비번 1234 -> 암호화: asdf
//B회원 비번 1234 -> 암호화: asdf
//Bcrypt방식 암호화
//:암호화 하기전에 salt를 추가하여 변형된 상태로 암호화를 진행한다
//A회원 비번 1234 -> 암호화: asdf
//B회원 비번 1234 -> 암호화: qqggdsfe
//매번 암호화되는 비밀번호가 달라져 DB에서 직접 비교 불가능
//대신 Bcrypt 암호화를 지원하는 객체가
//이를 비교하는 기능(메서드)를 가지고있어서 이를 활용하면 된다
//***Bcrpyt 암호화를 사용하기 위해 이를 지원하는 Spring-security 모듈 추가해야한다***
// 원래비밀번호 / 암호화된비밀번호
log.debug(inputMember.getMemberPw() + " / " + bcrypt.encode(inputMember.getMemberPw()));
log.debug(inputMember.getMemberPw() + " / " + bcrypt.encode(inputMember.getMemberPw()));
log.debug(inputMember.getMemberPw() + " / " + bcrypt.encode(inputMember.getMemberPw()));
Member loginMember = dao.login(inputMember);
//loginMember == null ->일치하는 이메일이 없다는 의미
if(loginMember != null) { //일치하는 이메일을 가진 회원정보가 있을 경우
//비밀번호암호화
//평문(비밀번호) DB에서 조회한 암호화된 비밀번호 ->같으면 true
if(bcrypt.matches(inputMember.getMemberPw(), loginMember.getMemberPw())) { //비밀번호가 일치할 경우
loginMember.setMemberPw(null); //비교 끝나서 비밀번호 지우기 (session에 올라가지 않게끔)
}else {
loginMember = null;
}
}
return loginMember;
}
'Spring' 카테고리의 다른 글
0426spring 회원가입시 주소검색 가능하게 만들기 (0) | 2023.04.26 |
---|---|
0426 spring 이메일 중복, 유효성 검사 (0) | 2023.04.26 |
cmd창,powershell창 lombok설치시 에러 error: could not open 해결방법 및 lombok설치 (0) | 2023.04.26 |
spring 아이디 저장(쿠키생성) (0) | 2023.04.25 |
spring 로그인, 로그아웃, 로그인 실패시 메세지 (0) | 2023.04.25 |