Search

๋กœ๊ทธ์ธ

๋กœ๊ทธ์ธ

๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

ํ™”๋ฉด

์ž‘์—… ์ˆœ์„œ

1.
login.jsp
2.
users.sql
4.
UserDAO.java
5.
UserService.java
6.
UserServiceImpl.java
7.
UserServlet.java

์ฝ”๋“œ

login.jsp

<%@ include file="/layout/jstl.jsp" %> <%@ include file="/layout/common.jsp" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>project๐Ÿ’ป - ALOHA CLASS๐ŸŒด</title> <jsp:include page="/layout/meta.jsp" /> <jsp:include page="/layout/link.jsp" /> </head> <body> <jsp:include page="/layout/header.jsp" /> <%-- [Contents] ######################################################### --%> <main> <div class="container"> <div class="px-4 pt-5 my-5 text-center"> <div class="col-lg-6 mx-auto"> <form action="${ root }/users/login" method="post"> <div class="row justify-content-center"> <div class="card p-5"> <h2 class="display-4 fw-bold">Login</h2> <div class="card-body"> <div class="mb-3"> <input class="form-control" type="text" name="username" id="username" placeholder="์•„์ด๋””"> </div> <div class="mb-3"> <input class="form-control" type="password" name="password" id="password" placeholder="๋น„๋ฐ€๋ฒˆํ˜ธ"> </div> <div class="row"> <div class="mb-3 col-6"> <input type="checkbox" class="form-check-input" name="rememberId" id="remember-id"> <label class="form-check-label" for="remember-id">์•„์ด๋”” ์ €์žฅ</label> </div> <div class="mb-3 col-6"> <input type="checkbox" class="form-check-input" name="rememberMe" id="remember-me"> <label class="form-check-label" for="remember-me">์ž๋™ ๋กœ๊ทธ์ธ</label> </div> </div> <div class="d-grid gap-2"> <button type="submit" class="btn btn-primary">๋กœ๊ทธ์ธ</button> <a href="${ root }/join.jsp" class="btn btn-success">ํšŒ์›๊ฐ€์ž…</a> </div> </div> </div> </div> </form> </div> </div> </div> </main> <%-- [Contents] ######################################################### --%> <jsp:include page="/layout/footer.jsp" /> <jsp:include page="/layout/script.jsp" /> </body> </html>
HTML
๋ณต์‚ฌ

users.sql

DROP TABLE IF EXISTS board; CREATE TABLE `aloha`.`users` ( `no` INT NOT NULL AUTO_INCREMENT, `id` VARCHAR(64) NOT NULL, `username` VARCHAR(100) NOT NULL, `password` VARCHAR(100) NOT NULL, `name` VARCHAR(100) NOT NULL, `email` VARCHAR(100) NULL, `created_at` TIMESTAMP NOT NULL DEFAULT now(), `updated_at` TIMESTAMP NOT NULL DEFAULT now(), PRIMARY KEY (`no`), UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE, UNIQUE INDEX `username_UNIQUE` (`username` ASC) VISIBLE) COMMENT = 'ํšŒ์›';
SQL
๋ณต์‚ฌ
package board.DTO; import java.util.Date; import com.alohaclass.jdbc.annotation.Column; import com.alohaclass.jdbc.annotation.Pk; import com.alohaclass.jdbc.annotation.Table; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Table("users") @Data @NoArgsConstructor @AllArgsConstructor @Builder public class Users { @Pk private int no; private String id; private String username; private String password; @Column(exist = false) private String passwordConfirm; private String name; private String email; private Date createdAt; private Date updatedAt; }
Java
๋ณต์‚ฌ

UserDAO.java

package board.DAO; import com.alohaclass.jdbc.dao.BaseDAOImpl; import board.DTO.Users; public class UserDAO extends BaseDAOImpl<Users> { }
Java
๋ณต์‚ฌ

UserService.java

package board.Service; import board.DTO.Users; public interface UserService { // ํšŒ์›๊ฐ€์ž… public int join(Users user); // ์•„์ด๋”” ์ค‘๋ณต ํ™•์ธ public boolean idCheck(String username); // ๋กœ๊ทธ์ธ public boolean login(Users user); // ์•„์ด๋””๋กœ ํšŒ์› ์กฐํšŒ public Users selectByUsername(String username); }
Java
๋ณต์‚ฌ

UserServiceImpl.java

package board.Service; import java.util.HashMap; import java.util.Map; import org.mindrot.jbcrypt.BCrypt; import board.DAO.UserDAO; import board.DTO.Users; public class UserServiceImpl implements UserService { private UserDAO userDAO = new UserDAO(); @Override public int join(Users user) { try { // ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” String password = user.getPassword(); String encodedPassword = BCrypt.hashpw(password, BCrypt.gensalt()); user.setPassword(encodedPassword); // ํšŒ์› ๋“ฑ๋ก int result = userDAO.insert(user); return result; // ๋“ฑ๋ก ์„ฑ๊ณต } catch (Exception e) { e.printStackTrace(); } return 0; // ๋“ฑ๋ก ์‹คํŒจ } @Override public boolean idCheck(String username) { Map<String, Object> map = new HashMap<>(); map.put("username", username); Object user = null; try { user = userDAO.selectBy(map); } catch (Exception e) { e.printStackTrace(); } // ์•„์ด๋”” ์ค‘๋ณตX if( user == null ) { return false; } return true; } @Override public boolean login(Users user) { String username = user.getUsername(); String password = user.getPassword(); Map<String, Object> map = new HashMap<>(); map.put("username", username); Users joinedUser = null; try { joinedUser = userDAO.selectBy(map); } catch (Exception e) { e.printStackTrace(); } // ์•„์ด๋””๊ฐ€ ์กด์žฌ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ if( joinedUser == null ) return false; // ๋น„๋ฐ€๋ฒˆํ˜ธ ์ผ์น˜ ์—ฌ๋ถ€ ํ™•์ธ String joinedPasswword = joinedUser.getPassword(); boolean result = BCrypt.checkpw(password, joinedPasswword); return result; } @Override public Users selectByUsername(String username) { Map<String, Object> map = new HashMap<>(); map.put("username", username); Users user = null; try { user = userDAO.selectBy(map); } catch (Exception e) { e.printStackTrace(); } return user; } }
Java
๋ณต์‚ฌ

UserServlet.java

package board.servlet; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import java.io.IOException; import java.util.UUID; import board.DTO.Users; import board.Service.UserService; import board.Service.UserServiceImpl; @WebServlet("/users/*") public class UserServlet extends HttpServlet { private static final long serialVersionUID = 1L; private UserService userService = new UserServiceImpl(); /** * [GET] */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // url : /users/idCheck String root = request.getContextPath(); String path = request.getPathInfo(); // /idCheck // /idCheck - ์•„์ด๋”” ์ค‘๋ณต ํ™•์ธ if( path.equals("/idCheck") ) { System.out.println("์•„์ด๋”” ์ค‘๋ณต ํ™•์ธ..."); String username = request.getParameter("username"); boolean check = userService.idCheck(username); response.getWriter().print(check); } } /** * [POST] */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String root = request.getContextPath(); // /Board String path = request.getPathInfo(); // /idCheck // /join - ํšŒ์›๊ฐ€์ž… if( path.equals("/join") ) { System.out.println("ํšŒ์›๊ฐ€์ž… ์š”์ฒญ ์ฒ˜๋ฆฌ..."); String username = request.getParameter("username"); String password = request.getParameter("password"); String name = request.getParameter("name"); String email = request.getParameter("email"); Users user = Users.builder() .id( UUID.randomUUID().toString() ) .username(username) .password(password) .name(name) .email(email) .build(); int result = userService.join(user); // ํšŒ์›๊ฐ€์ž… ์„ฑ๊ณต if( result > 0 ) { response.sendRedirect(root + "/"); } // ํšŒ์›๊ฐ€์ž… ์‹คํŒจ else { response.sendRedirect(root + "/join.jsp?error=true"); } } // /login - ๋กœ๊ทธ์ธ if( path.equals("/login") ) { String username = request.getParameter("username"); String password = request.getParameter("password"); Users user = Users.builder() .username(username) .password(password) .build(); boolean result = userService.login(user); // ๋กœ๊ทธ์ธ ์„ฑ๊ณต if( result ) { // ํšŒ์› ์กฐํšŒ Users loginUser = userService.selectByUsername(username); loginUser.setPassword(null); // ์„ธ์…˜์— ์‚ฌ์šฉ์ž ์ •๋ณด ๋“ฑ๋ก HttpSession session = request.getSession(); session.setAttribute("loginId", user.getUsername()); session.setAttribute("loginUser", loginUser); response.sendRedirect(root + "/"); } // ๋กœ๊ทธ์ธ ์‹คํŒจ else { response.sendRedirect(root + "/login.jsp?error=true"); } } } }
Java
๋ณต์‚ฌ