DB
현재 DB에는 비밀번호가 자연어로 들어가서 보안에 취약하다.
개발자가 사용자들의 민감한 정보를 확인할 수 있다.
따라서 이 비밀번호를 암호화 시켜서 DB에 저장해야 된다.
Application.yml
먼저 application의 ddl-auto 를 create 로 변경
jpa:
open-in-view: true
hibernate:
ddl-auto: create
SecurityConfig.java
해쉬 암호화 하는 메서드 추가
@Bean // IoC가 된다!!
BCryptPasswordEncoder encodePWD() {
return new BCryptPasswordEncoder();
}
UserApiController.java
@PostMapping("/auth/joinProc")
public ResponseDto<Integer> save(@RequestBody User user) { //userName, password, email
System.out.println("UserApiController : save 호출됨");
// 실제로 DB에 insert를 하고 아래에서 return이 되면 된다.
userService.회원가입(user);
// user.setRole(RoleType.USER); Service에서하자
return new ResponseDto<Integer>(HttpStatus.OK.value(), 1); // 자바오브젝트를 JSON으로 변환해서 리턴(Jackson)
}
UserService.java
@Autowired
private BCryptPasswordEncoder encoder;
@Transactional // 전체가 성공하면 commit 실패시 rollback
public void 회원가입(User user) {
String rawPassword = user.getPassword(); // 1234 원문
String encPassword = encoder.encode(rawPassword); // 해쉬암호화
user.setPassword(encPassword); // 암호화된 비밀번호를 user객체에 set
user.setRole(RoleType.USER);
userRepository.save(user);
}
테스트
비밀번호가 해쉬암호화 돼서 DB에 잘 저장된다.