Search
Duplicate

์•„์ด๋”” ์ €์žฅ

์•„์ด๋”” ์ €์žฅ

์•„์ด๋”” ์ €์žฅ ์ฒดํฌ ์—ฌ๋ถ€์— ๋”ฐ๋ผ์„œ, ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑ ๋˜๋Š” ์†Œ๋ฉธ์‹œ์ผœ ์ €์žฅ๋œ ์•„์ด๋””๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ

ํ™”๋ฉด

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

1.
UserServlet.java
2.
LoginServlet.java
3.
login.jsp

์ฝ”๋“œ

UserServlet.java

โ€ข
์ฃผ์š” ์ฝ”๋“œ
// ์•„์ด๋”” ์ €์žฅ --------------------------------------------------- String rememberId = request.getParameter("rememberId"); Cookie cookieRememberId = new Cookie("rememberId", ""); Cookie cookieUsername = new Cookie("username", ""); cookieRememberId.setPath("/"); cookieUsername.setPath("/"); System.out.println("rememberId : " + rememberId); // ์•„์ด๋”” ์ €์žฅ ์ฒดํฌ ์‹œ - ๊ฐ’ : on if( rememberId != null && rememberId.equals("on") ) { // ์ฟ ํ‚ค ์ƒ์„ฑ cookieRememberId.setValue( URLEncoder.encode(rememberId, "UTF-8") ); cookieUsername.setValue( URLEncoder.encode(username, "UTF-8") ); // ์ฟ ํ‚ค ๋งŒ๋ฃŒ์‹œ๊ฐ„ ์„ค์ • - 7์ผ (/์ดˆ) cookieRememberId.setMaxAge(60*60*24*7); cookieUsername.setMaxAge(60*60*24*7); } // ์•„์ด๋”” ์ €์žฅ ์ฒดํฌ ํ•ด์ œ ์‹œ else { // ์ฟ ํ‚ค ์‚ญ์ œ - ์ฟ ํ‚ค ์œ ํšจ์‹œ๊ฐ„์„ 0์œผ๋กœ ํ•˜๊ณ  ์‘๋‹ต cookieRememberId.setMaxAge(0); cookieUsername.setMaxAge(0); } // ์‘๋‹ต์— ์ฟ ํ‚ค ๋“ฑ๋ก response.addCookie(cookieRememberId); response.addCookie(cookieUsername); // ์•„์ด๋”” ์ €์žฅ ๋ ---------------------------------------------------
Java
๋ณต์‚ฌ
โ€ข
์ „์ฒด ์ฝ”๋“œ
package board.servlet; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.Cookie; 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.net.URLEncoder; 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(); String page = ""; // /idCheck - ์•„์ด๋”” ์ค‘๋ณต ํ™•์ธ if( path.equals("/idCheck") ) { System.out.println("์•„์ด๋”” ์ค‘๋ณต ํ™•์ธ..."); String username = request.getParameter("username"); boolean check = userService.idCheck(username); response.getWriter().print(check); } // /logout - ๋กœ๊ทธ์•„์›ƒ if( path.equals("/logout") ) { System.out.println("๋กœ๊ทธ์•„์›ƒ..."); HttpSession session = request.getSession(); session.invalidate(); response.sendRedirect(root + "/"); } } /** * [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"); // ์•„์ด๋”” ์ €์žฅ --------------------------------------------------- String rememberId = request.getParameter("rememberId"); Cookie cookieRememberId = new Cookie("rememberId", ""); Cookie cookieUsername = new Cookie("username", ""); cookieRememberId.setPath("/"); cookieUsername.setPath("/"); System.out.println("rememberId : " + rememberId); // ์•„์ด๋”” ์ €์žฅ ์ฒดํฌ ์‹œ - ๊ฐ’ : on if( rememberId != null && rememberId.equals("on") ) { // ์ฟ ํ‚ค ์ƒ์„ฑ cookieRememberId.setValue( URLEncoder.encode(rememberId, "UTF-8") ); cookieUsername.setValue( URLEncoder.encode(username, "UTF-8") ); // ์ฟ ํ‚ค ๋งŒ๋ฃŒ์‹œ๊ฐ„ ์„ค์ • - 7์ผ (/์ดˆ) cookieRememberId.setMaxAge(60*60*24*7); cookieUsername.setMaxAge(60*60*24*7); } // ์•„์ด๋”” ์ €์žฅ ์ฒดํฌ ํ•ด์ œ ์‹œ else { // ์ฟ ํ‚ค ์‚ญ์ œ - ์ฟ ํ‚ค ์œ ํšจ์‹œ๊ฐ„์„ 0์œผ๋กœ ํ•˜๊ณ  ์‘๋‹ต cookieRememberId.setMaxAge(0); cookieUsername.setMaxAge(0); } // ์‘๋‹ต์— ์ฟ ํ‚ค ๋“ฑ๋ก response.addCookie(cookieRememberId); response.addCookie(cookieUsername); // ์•„์ด๋”” ์ €์žฅ ๋ --------------------------------------------------- // ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ 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
๋ณต์‚ฌ

LoginServlet.java

package board.servlet; import java.io.IOException; import java.net.URLDecoder; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @WebServlet({"/login", "/login.jsp"}) public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String page = ""; // ์•„์ด๋”” ์ €์žฅ ์ฟ ํ‚ค ํ™•์ธ System.out.println("์•„์ด๋”” ์ €์žฅ ์ฟ ํ‚ค ํ™•์ธ ..."); String rememberId = ""; String username = ""; Cookie[] cookies = request.getCookies(); if( cookies != null ) { for( Cookie cookie : cookies ) { String cookieName = cookie.getName(); String cookieValue = URLDecoder.decode( cookie.getValue(), "UTF-8" ); switch(cookieName) { case "username" : username = cookieValue; break; case "rememberId" : rememberId = cookieValue; break; } } } request.setAttribute("username", username); request.setAttribute("rememberId", rememberId); page = "/page/login.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(page); dispatcher.forward(request, response); } }
Java
๋ณต์‚ฌ

login.jsp

โ€ข
์ฃผ์š” ์ฝ”๋“œ
<div class="mb-3"> <input class="form-control" type="text" name="username" id="username" placeholder="์•„์ด๋””" value="${ username }"> </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"> <c:if test="${ rememberId == null || rememberId == '' }"> <input type="checkbox" class="form-check-input" name="rememberId" id="remember-id"> </c:if> <c:if test="${ rememberId != null && rememberId == 'on' }"> <input type="checkbox" class="form-check-input" name="rememberId" id="remember-id" checked> </c:if> <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>
Java
๋ณต์‚ฌ
โ€ข
์ „์ฒด ์ฝ”๋“œ
<%@ 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="์•„์ด๋””" value="${ username }"> </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"> <c:if test="${ rememberId == null || rememberId == '' }"> <input type="checkbox" class="form-check-input" name="rememberId" id="remember-id"> </c:if> <c:if test="${ rememberId != null && rememberId == 'on' }"> <input type="checkbox" class="form-check-input" name="rememberId" id="remember-id" checked> </c:if> <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
๋ณต์‚ฌ