개요
회원가입 로직을 짠다. 회원가입은 /join 으로 POST요청이 들어오면, Controller, Service를 거쳐서 Repository를 통해 DB에 접근해주도록 한다.
JoinController
@ResponseBody
@Controller
@RequiredArgsConstructor
public class JoinController {
private final JoinService joinService;
@PostMapping("/join")
public String JoinProcess(@RequestBody JoinDto joinDto){
System.out.println(joinDto);
joinService.joinProcess(joinDto);
return "ok";
}
}
컨트롤러에서는 /join 으로부터 Post요청이 들어온다. Body에 JoinDto형식으로 들어온 데이터를 JoinService의 JoinProcess라는 메서드를 통해서 데이터를 검증하고, DB에 저장한다.
JoinDto
@Getter
@Setter
public class JoinDto {
private String username;
private String password;
}
JoinDto는 간단하게 username, password를 받도록 해준다.
JoinService
@Service
@RequiredArgsConstructor
public class JoinService {
private final UserRepository userRepository;
private final BCryptPasswordEncoder bCryptPasswordEncoder;
public void joinProcess(JoinDto joinDto) {
String username = joinDto.getUsername();
String password= joinDto.getPassword();
Boolean isExist = userRepository.existsByUsername(username);
if(isExist){
return;
}
UserEntity data = new UserEntity();
data.setUsername(username);
data.setPassword(bCryptPasswordEncoder.encode(password));
data.setRole("ROLE_ADMIN");
userRepository.save(data);
}
}
Service에서는 joinProcess라는 메서드를 만든다.
JoinDto형식의 데이터를 받아서 username, password라는 변수에 할당해준다. 해당 username이 이미 DB에 있는지 repository에서 검사를 해서, 이미 존재하면 일단 로직이 끝나도록 해준다. 존재하지 않다면, UserEntity형 객체 data를 만들어서 username을 넣고, password의 경우 bCryptPasswordEncoder로 암호화를 해주도록한다. Role(권한)의 경우, 일단 ROLE_ADMIN이라는 권한을 주도록 한다.
이후 데이터가 담긴 data를 DB에 저장해주도록 한다.
JoinEntity
@Entity
@Getter
@Setter
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String username;
private String password;
private String role;
}
UserRepository
@Repository
public interface UserRepository extends JpaRepository<UserEntity, Integer> {
Boolean existsByUsername(String username);
UserEntity findByUsername(String username);
}