[Spring Boot] 8. Spring Boot Project (Store v2)_2.User - Login

김미숙's avatar
Mar 31, 2025
[Spring Boot] 8. Spring Boot Project (Store v2)_2.User - Login

UserRequest

package com.metacoding.storev2.user; import lombok.Data; public class UserRequest { @Data public static class JoinDTO { private String username; private String password; public String fullname; } @Data public static class LoginDTO { private String username; private String password; } }

header

<!DOCTYPE html> <html lang="en"> <head> <title>Store</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script> </head> <body> <nav class="navbar navbar-expand-sm bg-dark navbar-dark"> <div class="container-fluid"> <a class="navbar-brand" href="/">Home</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#collapsibleNavbar"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="collapsibleNavbar"> <ul class="navbar-nav"> <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> <li class="nav-item"> <a class="nav-link" href="#">상품목록</a> </li> <li class="nav-item"> <a class="nav-link" href="#">상품등록</a> </li> <li class="nav-item"> <a class="nav-link" href="#">구매목록</a> </li> <li class="nav-item"> <a class="nav-link" href="#">로그아웃</a> </li> </ul> </div> </div> </nav> <!--네브바종료-->

UserController

package com.metacoding.storev2.user; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @RequiredArgsConstructor @Controller public class UserController { private final UserService userService; private final HttpSession session; @GetMapping("/") public String home() { return "home"; } @GetMapping("/login-form") public String loginForm() { return "user/login-form"; } @PostMapping("/login") public String login(UserRequest.LoginDTO loginDTO) { User sessionUser = userService.로그인(loginDTO); session.setAttribute("sessionUser", sessionUser); return "redirect:/"; } @GetMapping("/join-form") public String joinForm() { return "user/join-form"; } @PostMapping("/join") public String join(UserRequest.JoinDTO joinDTO) { userService.회원가입(joinDTO); return "redirect:/login-form"; } }

UserService

package com.metacoding.storev2.user; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @RequiredArgsConstructor @Service public class UserService { private final UserRepository userRepository; @Transactional public void 회원가입(UserRequest.JoinDTO joinDTO) { // 동일 회원 있는지 검사 User user = userRepository.findByUsername(joinDTO.getUsername()); if (user != null) { throw new RuntimeException("동일한 username이 존재합니다."); } // 회원가입 userRepository.save(joinDTO.getUsername(), joinDTO.getPassword(), joinDTO.getFullname()); } public User 로그인(UserRequest.LoginDTO loginDTO) { // User 존재 확인 User user = userRepository.findByUsername(loginDTO.getUsername()); if (user == null) { throw new RuntimeException("해당 username이 없습니다."); } if (!(user.getPassword().equals(loginDTO.getPassword()))) { throw new RuntimeException("해당 password가 틀렸습니다."); } // 로그인 return user; } }

home

{{> layout/header}} <div class="container mt-2"> <div class="mt-4 p-5 bg-light text-dark rounded-4"> <h1>가게에 오신것을 환영합니다.</h1> <h3> {{#sessionUser}} {{sessionUser.fullname}}님 {{/sessionUser}} </h3> </div> </div> </body> </html>
 
Share article

parangdajavous