1. 회원가입
- UserController
@PostMapping("/join")
public @ResponseBody Resp<?> join(@Valid @RequestBody UserRequest.JoinDTO reqDTO, Errors errors) {
UserResponse.DTO respDTO = userService.회원가입(reqDTO);
return Resp.ok(respDTO);
}
- UserService
- 회원가입 시 원래 정보를 DB에 저장하면 안 됨
- 해시를 이용한 암호화 진행 후 DB에 삽입
- 해시 값을 비교할 때에는 라이브러리에서 입력값과 저장된 해시값을 비교하는 함수 사용
// RestAPI 규칙1 : insert 요청시에 그 행을 dto에 담아서 리턴한다
@Transactional
public UserResponse.DTO 회원가입(UserRequest.JoinDTO reqDTO) {
try {
String encPassword = BCrypt.hashpw(reqDTO.getPassword(), BCrypt.gensalt());
reqDTO.setPassword(encPassword);
User userPS = userRepository.save(reqDTO.toEntity());
return new UserResponse.DTO(userPS);
} catch (Exception e) {
throw new ExceptionApi400("잘못된 요청입니다");
}
}
결과
- 회원가입 성공

- H2 Database

2. 로그인
- UserController
@PostMapping("/login")
public @ResponseBody Resp<?> login(@Valid @RequestBody UserRequest.LoginDTO loginDTO, Errors errors, HttpServletResponse response) {
UserResponse.TokenDTO respDTO = userService.로그인(loginDTO);
return Resp.ok(respDTO);
}
- UserService
public UserResponse.TokenDTO 로그인(UserRequest.LoginDTO loginDTO) {
User userPS = userRepository.findByUsername(loginDTO.getUsername())
.orElseThrow(() -> new ExceptionApi401("유저네임 혹은 비밀번호가 틀렸습니다"));
boolean isSame = BCrypt.checkpw(loginDTO.getPassword(), userPS.getPassword());
if (!isSame) throw new ExceptionApi401("유저네임 혹은 비밀번호가 틀렸습니다.");
// 토큰 생성
String accessToken = JwtUtil.create(userPS);
return UserResponse.TokenDTO.builder().accessToken(accessToken).build();
}
결과
- 로그인 성공 시
- accessToken 반환 - 인가 시 사용

- 로그인 실패 시

3. 로그아웃
Share article