๋ก๊ทธ์ธ
๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํฉ๋๋ค.
ํ๋ฉด
์์ ์์
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
๋ณต์ฌ