카테고리 없음

BCryptPasswordEncoder 암호화 처리

최종군 2024. 11. 6. 01:13

Controller에 BCryptPasswordEncoder  객체를 생성한다. 

 

생성자 주입 방식으로 DI를 주기 위해서  

private final BCryptPasswordEncoder bCrypt;으로 설정한다.

 

 

/login 로그인 요청 시 

 

@RequestMapping("/login")
public String loginMember(Member m
, Model model
, HttpSession session) {

System.out.println("id --> " + m.getUserId());
System.out.println("pwd --> " + m.getUserPwd());

Member loginUser = mService.loginMember(m);

if (loginUser != null
&& bCrypt.matches(m.getUserPwd(), loginUser.getUserPwd())
) { // 로그인 성공
// 세션영역에 로그인 정보 저장
session.setAttribute("loginUser", loginUser);

// url 재요청 (메인페이지)
return "redirect:/";
} else { // 로그인 실패
// request영역에 에러메시지 저장
// => Model 객체 : requestScope
model.addAttribute("errorMsg", "로그인에 실패했습니다.");

// 에러페이지 응답 (포워딩)
// "/WEB-INF/views/ common/errorPage .jsp"
return "common/errorPage";
}
}

 

m.getUserPwd() :

데이터베이스에서 가지고온 저장된 사용자 비밀번호이다. 

 

loginUser.getUserPwd() 사용자가 로그인할 때 입력한 비밀번호이다. 

 

.matches() 메소드는 두 개의 인자를 받는다. 

첫 번째 인자는 해시된 비밀번호 [데이터 베이스에서 가져온 비밀번호]

두 번째 인자는 사용자가 입력한 비밀번호이다. 

 

이 메소드는 사용자가 입력한 비밀번호가 해시된 비밀번호와 일치하는지 여부를 반환한다.

 

 

 

회원가입 폼

 

@RequestMapping("/insert")
public String insertMember(Member m
, HttpSession session
, Model model) {

System.out.println(m);
// => 한글 인코딩 처리 --> web.xml 파일에 필터를 등록하여 처리
// => 숫자 타입의 데이터(나이,age)가 값이 없을 경우 400 에러 발생
// --> DB 처리 시 자동 형변환 되므로 정수형->문자열 형변환하여 처리

// => 비밀번호 값을 입력된 값 그대로(평문) 저장하는 것이 아니라
// 원래 값을 알아보기 어렵게 만든 값(암호문)으로 저장할 것임!
//      * Spring-security 라이브러리 추가 (pom.xml 등록)
//      * BCryptPasswordEncoder 클래스를 빈으로 등록 (xml 파일 사용)
//      * 추가한 파일을 서버 구동 시 pre-loading 할 수 있도록 web.xml 파일에 설정

System.out.println("평문 --> " + m.getUserPwd());

System.out.println("암호문 --> " + bCrypt.encode(m.getUserPwd()));

m.setUserPwd( bCrypt.encode(m.getUserPwd()) );
// => Member 객체에 비밀번호 평문을 암호문으로 변경

int result = mService.insertMember(m);

if (result > 0) { // 회원가입 성공 => 성공메시지 + 메인페이지 url 재요청
session.setAttribute("alertMsg", "회원가입에 성공했습니다.");

return "redirect:/";
} else { // 회원가입 실패 => 에러메시지 + 에러페이지 포워딩
model.addAttribute("errorMsg", "회원가입에 실패했습니다.");

return "common/errorPage";
}

}

 

spring boot에서 BCryptPasswordEncoder 빈 등록하는 방법

 

@Configuration

 

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import org.springframework.security.crypto.password.PasswordEncoder;

 

@Configuration public class SecurityConfig {

@Bean public PasswordEncoder passwordEncoder() {

return new BCryptPasswordEncoder();

}

}

 

Spring boot에서 

@Configuration 클래스에 BCryptPasswordEncoder 빈을 등록하는 것만으로 

BCryptPasswordEncoder 생성이 가능하다 web.xml 같은 설정 파일을 사용할 필요가 없다.