inblog logo
|
sxias
    스프링부트

    [스프링부트] 14. Storev2 : 유저 기능

    문정준's avatar
    문정준
    Mar 28, 2025
    [스프링부트] 14. Storev2 : 유저 기능
    Contents
    1. 회원가입2. 로그인3. 로그아웃
    ✏️

    로그인한 상태가 아니면, 상품 관련 메뉴들은 비활성화시켜야 함

    • 쿠키의 특성을 활용하여, header에서 쿠키의 content 여부에 따라 메뉴 차별화
      • 있으면 (로그인 한 상태), 상품 메뉴, 주문 내역, 로그아웃 표시
      • 없으면 (로그인 안 한 상태), 회원가입, 로그인 표시
     

    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>
    notion image
     

    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>
    notion image

    3. 로그아웃

    Codes
    UserController
    // TODO : logout @GetMapping("/logout") public String logout(HttpSession session) { session.invalidate(); return "redirect:/"; }
    Share article
    Contents
    1. 회원가입2. 로그인3. 로그아웃

    Sxias ㆍ a32176740@gmail.com

    RSS·Powered by Inblog