1. View 확인
클라이언트로부터 username 과 password 를 받기 위해 DTO를 만든다.
@Data public static class LoginDTO{ private String username; private String password; }
2. 레파지토리
@RequiredArgsConstructor @Repository public class UserRepository { private final EntityManager em; public User findByUsernameAndPassword(UserRequest.LoginDTO requestDTO) { String q = """ select u from User u where u.username = :username and u.password =:password """; Query query = em.createQuery(q, User.class); query.setParameter("username",requestDTO.getUsername()); query.setParameter("password",requestDTO.getPassword()); return (User) query.getSingleResult(); } }
3. 컨트롤러
//로그인 @PostMapping("/login") public String login(UserRequest.LoginDTO requestDTO){ User sessionUser = userRepository.findByUsernameAndPassword(requestDTO); session.setAttribute("sessionUser",sessionUser); return "redirect:/"; } //로그아웃 @GetMapping("/logout") public String logout() { session.invalidate(); return "redirect:/"; }
4. View 확인
<ul class="navbar-nav"> {{#sessionUser}} <li class="nav-item"> <a class="nav-link" href="/board/save-form">글쓰기</a> </li> <li class="nav-item"> <a class="nav-link" href="/user/update-form">회원정보보기</a> </li> <li class="nav-item"> <a class="nav-link" href="/logout">로그아웃</a> </li> {{/sessionUser}} {{^sessionUser}} <li class="nav-item"> <a class="nav-link" href="/join-form">회원가입</a> </li> <li class="nav-item"> <a class="nav-link" href="/login-form">로그인</a> </li> {{/sessionUser}}
sessionUser 값이 있다면 로그인 상태로, 로그인 상태와 비로그인 상태일 때 네비게이션 바에 표시될 버튼을 구분한다.
Share article