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