inblog logo
|
{CODE-RYU};
    SPIRNG

    [Spring] @ManyToOne 어노테이션 3 로그인, 로그아웃

    류재성's avatar
    류재성
    Mar 18, 2024
    [Spring] @ManyToOne 어노테이션 3 로그인, 로그아웃
    Contents
    1. View 확인2. 레파지토리3. 컨트롤러4. View 확인
     
     

    1. View 확인

     
    notion image
     
    클라이언트로부터 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

    {CODE-RYU};

    RSS·Powered by Inblog