1. 회원가입
Codes
UserController
@GetMapping("/user/join-form")
public String joinForm() {
return "user/join-form";
}
// TODO : join
@PostMapping("/join")
public String join(UserRequest.JoinDTO joinDTO) {
if(joinDTO.getUsername().length() > 12) throw new RuntimeException("아이디가 너무 깁니다.");
userService.회원가입(joinDTO);
return "user/login-form";
}
UserService
@Transactional
public void 회원가입(UserRequest.JoinDTO joinDTO) {
User userinfo = userRepository.findByUsername(joinDTO.getUsername());
if (userinfo != null) throw new RuntimeException("이미 존재하는 아이디입니다.");
userRepository.join(joinDTO.getUsername(), joinDTO.getPassword(), joinDTO.getFullname());
}
UserRepository
public void join(String username, String password, String fullname) {
Query q = em.createNativeQuery("insert into user_tb(username, password, fullname, created_at) values (?, ?, ?, now())");
q.setParameter(1, username);
q.setParameter(2, password);
q.setParameter(3, fullname);
q.executeUpdate();
}
public User findByUsername(String username) {
Query q = em.createNativeQuery("select * from user_tb where username = ?", User.class);
q.setParameter(1, username);
try {
return (User) q.getSingleResult();
} catch (Exception e) {
return null;
}
}
UserRequest
@Data
public static class JoinDTO {
private String username;
private String password;
private String fullname;
}
Form
{{> layout/header}}
<div class="container mt-2">
<div class="mt-4 p-5 bg-light text-dark rounded-4">
<h1>회원가입 페이지</h1>
<form action="/join" method="post">
<div class="mb-3 mt-3">
<input type="text" class="form-control" placeholder="Enter username" name="username">
</div>
<div class="mb-3">
<input type="password" class="form-control" placeholder="Enter password" name="password">
</div>
<div class="mb-3">
<input type="text" class="form-control" placeholder="Enter fullname" name="fullname">
</div>
<button type="submit" class="btn btn-primary">회원가입</button>
</form>
</div>
</div>
</body>
</html>

2. 로그인
Codes
UserController
@GetMapping("/user/login-form")
public String loginForm() {
return "user/login-form";
}
// TODO : login
@PostMapping("/login")
public String login(UserRequest.LoginDTO loginDTO, HttpSession session) {
User userinfo = userService.로그인(loginDTO);
session.setAttribute("sessionUser", userinfo);
return "redirect:/";
}
UserService
public User 로그인(UserRequest.LoginDTO loginDTO) {
User userinfo = userRepository.findByUsername(loginDTO.getUsername());
if(userinfo == null) throw new RuntimeException("회원 정보가 없습니다.");
if(!(userinfo.getPassword().equals(loginDTO.getPassword()))) {
throw new RuntimeException("아이디 또는 비밀번호가 틀립니다.");
}
return userinfo;
}
UserRepository
public User findByUsername(String username) {
Query q = em.createNativeQuery("select * from user_tb where username = ?", User.class);
q.setParameter(1, username);
try {
return (User) q.getSingleResult();
} catch (Exception e) {
return null;
}
}
UserRequest
@Data
public static class LoginDTO {
private String username;
private String password;
private String fullname;
}
Form
{{> layout/header}}
<div class="container mt-2">
<div class="mt-4 p-5 bg-light text-dark rounded-4">
<h1>로그인 페이지</h1>
<form action="/login" method="post">
<div class="mb-3 mt-3">
<input type="text" class="form-control" placeholder="Enter username" name="username">
</div>
<div class="mb-3">
<input type="password" class="form-control" placeholder="Enter password" name="password">
</div>
<button type="submit" class="btn btn-primary">로그인</button>
</form>
</div>
</div>
</body>
</html>

3. 로그아웃
Codes
UserController
// TODO : logout
@GetMapping("/logout")
public String logout(HttpSession session) {
session.invalidate();
return "redirect:/";
}
Share article